草庐IT

Constructor

全部标签

c++ - 具有独占继承构造函数的类的值初始化

根据cppreference没有任何用户提供的构造函数的非union类类型将在构造之前被零初始化:IfTisannon-unionclasstypewithoutanyuser-providedconstructors,thentheobjectiszero-initializedandthentheimplicitly-declareddefaultconstructoriscalled(unlessit'strivial)我不确定在使用c++11继承的构造函数时会发生什么,因为引文明确提到了隐式声明默认构造函数。给定以下示例:#includestructA{inta;A(){}A(

c++ - constexpr 构造函数是否允许 return 语句?

如thispage中所述,constexpr构造函数主体的复合语句,如果不删除也不默认,必须满足constexpr函数主体的约束,即它可能包含任何声明,除了:asm声明goto语句try-block非文字类型或静态或线程存储持续时间或未执行初始化的变量的定义标准似乎没有限制可能出现的return语句的数量,而在C++11中,只允许出现一个。现在,考虑以下代码:classThing{public://Shouldn'tthisconstructorbefineunderbothC++11andC++14?constexprThing(){return;}};intmain(){Thing

c++ - 默认(用户定义)构造函数和带默认参数的构造函数之间的区别?

默认的用户自定义构造函数有什么区别classSimple{public:Simple(){}};和一个用户定义的构造函数,它接受多个参数但每个参数都有默认值classWithDefaults{public:WithDefaults(inti=1){}};除此之外,WithDefaults还可以用i的显式值构造吗?具体来说,我想知道,就语言而言,这两个构造函数是否起到了完全相同的默认构造函数的作用,或者类的属性之间是否存在细微差别?换句话说,所有参数都具有默认值的构造函数是否在所有方面都是默认构造函数? 最佳答案 当前标准工作草案N4

c++ - 为什么我不能使用显式构造函数来构造返回类型

我玩弄了显式构造函数及其行为,所以我创建了这个类:#includeclassX{public:explicitX(void){std::cout这基本上只是一个测试显式构造函数的stub。然后我想尝试几种情况。所以我尝试了这个:Xfoo(void){Xa{};returna;//ERROR:nomatchingconstructorfound!}intmain(){Xw{};//DefaultConstructorXx{w};//CopyConstructorXy{std::move(x)};//MoveConstructorXz{foo()};}如您所见,我无法在foo()中返回a。

c++ - 在破坏的对象上 move 构造函数?

我有一段代码#includeclassA{public:A(){std::cout我试着运行它,输出结果是DefaultconstructorDestructorMoveconstructorDestructor我的问题是为什么析构函数在move的构造函数之前被调用?这是否也意味着第二个对象是用销毁的值构造的? 最佳答案 从A&&f()返回局部变量与A&f()有同样的问题。它们都是引用。在main()中构造a时,局部变量已被销毁。这会导致引用已销毁的实例,从而导致未定义的行为。如果你想将A()从f()move到main中的a只需返回

c++ - G++ 4.4.7 中的 "names the constructor, not the type"

我有以下简单的C++代码:#includeclassA{public:A(inty):x(y){}A&operator=(constA&rhs);intx;};A::A&A::operator=(constA&rhs){this->x=rhs.x;return*this;}intmain(int,char**){Aa1(5);Aa2(4);printf("a2.x==%d\n",a2.x);a2=a1;printf("a2.x==%d\n",a2.x);return0;}第11行,A的operator=()函数的定义所在,格式不正确......或者,至少,我相信是这样。正如预期的那样,

c++ - 如何与模板化类的构造函数成为 friend ?

为什么classA;templateclassB{private:A*a;public:B();};classA:publicB{private:friendB::B();intx;};templateB::B(){a=newA;a->x=5;}intmain(){return0;}结果../src/main.cpp:15:error:invaliduseofconstructorasatemplate../src/main.cpp:15:note:use‘B::B’insteadof‘B::classB’tonametheconstructorinaqualifiedname还在改变

c++ - 在 C++ 构造函数中分配内存的正确方法是什么?

这是在C++构造函数中通过new分配内存的正确方法。参数列表中的第一种方式:classBoda{int*memory;public:Boda(intlength):memory(newint[length]){}~Boda(){delete[]memory;}};或者在构造函数体中:classBoda{int*memory;public:Boda(intlength){memory=newint[length];}~Boda(){delete[]memory;}};谢谢,BodaCydo。 最佳答案 我认为最简单的方法是使用boos

c++ - enable_if'ed 模板化模板构造函数的类型签名?

我通常先声明我的类和模板,然后再定义它们的方法(当然是在同一个头文件中)。我只是觉得这样更容易阅读。好吧,我遇到过这样一种情况,我无法找出在类外定义中使用的有效类型签名。这是我正在做的一个简化示例,它说明了问题:templatestructFoo{Foo(Ta,Tb);template>>Foo(Iteratorfirst,Iteratorlast);};templateFoo::Foo(Ta,Tb){...}templatetemplateFoo::Foo(Uf,Ul){...}我在WHAT_GOES_HERE槽中尝试了很多方法来尝试获得匹配的签名,但我一直失败。我需要enable_

c++ - 是否有可能调用一个父类(super class)的构造函数,两个类远离 C++ 中的当前类

我有三个继承如下的类:Class_AClass_B:publicClass_AClass_C:publicClass_BClass_A包含一个构造函数:public:Class_A(constchar*name,intkind);Class_B不包含该构造函数。在Class_C中,我希望调用Class_A的构造函数。像这样的东西:Class_C(constchar*name,intkind):Class_A::Class_A(name,kind){}问题是我无法向Class_B添加中间构造函数,因为Class_B是生成的代码,每次我makeclean时都会重新生成。所以我无法对Clas