草庐IT

Constructor

全部标签

C++可变参数模板构造函数和通用构造函数

代码如(c++14):structS{inta;intb;};classC{public:C(charconst*,size_t){}//1C(Sconst&){}//2C(Sconst*){}//3templateC(T&&...){}//4//C(S){}//5//C(S*){}//6};Ss{1,2};Cc1{s};//calls4andnot2Cc2{"abc",3};//calls4andnot1Cc3{(charconst*)"abc",(size_t)3};//calls1-okCc4{s};//calls5ifuncommentedCc5{&s};//calls6ifu

c++ - 在 C++ 中使用花括号实例化对象是什么意思?

假设我有一个结构定义为:typedefstructnumber{intareaCode;intprefix;intsuffix;}PhoneNumber;当我创建这个结构的实例时,如果我使用以下语法:PhoneNumberhomePhone={858,555,1234};...它调用了哪个构造函数?默认构造函数,或复制构造函数,或根本没有,因为它没有调用“new”?这个问题的真正目的是弄清楚如何添加第四个字段。所以我想将我的结构重新定义为:typedefstructnumber{intareaCode;intprefix;intsuffix;intextension;//NEWFIEL

C++ - 成员初始化和递增的顺序

我一直在寻找一些测试来提高我的C++知识。这是练习之一:以下程序的输出是什么?#includeclassA{public:A(intn=0):m_i(n){std::cout嗯,我试过这段代码,答案是02002。我来这里是为了解释一下,因为我不明白为什么02002是结果。我会解释我的推理,但有人可以告诉我我哪里错了吗?让我们将要打印的当前字符串称为“str”。当构建b对象时:A的构造函数被调用。str=>0,m_i=>1构建m_a(newA[2])。str=>000构建m_x(++m_i)。str=>0002,m_i=>3str的最后更新(在B的构造函数中)=>str=>00023这是

c++ - 在构造函数中指向 this 的弱指针

我知道无法通过从类的构造函数调用shared_from_this()来获取shared_ptr,因为该对象尚未构造。但是,是否有可能从构造函数中获得对象的weak_ptr?一些讨论“weak_from_raw()”方法的boost论坛帖子表明这是可能的。编辑:Boost形式讨论weak_from_rawhttp://lists.boost.org/boost-users/2010/08/61541.php 最佳答案 我想你指的是什么isthis.这似乎没有被合并到boost版本中(这可能是错误的)。来自boostdocs:常见问题问

c++ - 关于结构构造函数和析构函数行为 - C++

我不明白为什么这个程序的输出是这样的。为什么没有编译错误?我以为在尝试构造B时,编译器会找不到名为foo()的函数并报告错误。#includeusingnamespacestd;structA{inta;A(inti=0):a(i){cout输出:BA0ByeAByeB一般来说,我想知道当存在多重继承时,父结构体的构造和初始化顺序是怎样的?我也可以在类里面期待类似的行为吗?非常感谢任何关于构造函数和析构函数调用顺序的解释。注意:这不是家庭作业。而且,我研究过类似的主题,但没有找到关于这个问题的答案。 最佳答案 未定义的行为您通过调用

C++:默认复制构造函数是否受到其他构造函数和析构函数的影响?

Asweknow,如果声明了任何构造函数(包括复制构造函数),则不会隐式创建默认构造函数(不带参数的构造函数)。默认复制构造函数(执行对象的浅拷贝的构造函数)是否也会发生同样的情况?另外,析构函数的存在是否会对此产生影响? 最佳答案 12.8#4复制类对象Iftheclassdefinitiondoesnotexplicitlydeclareacopyconstructor,oneisdeclaredimplicitly析构函数没有任何作用 关于C++:默认复制构造函数是否受到其他构造函

c++ - 按值返回时不调用复制构造函数

我正在研究C++构造函数。这是我的代码:#includeusingnamespacestd;classArrayWrapper{public://defaultconstructorproducesamoderatelysizedarrayArrayWrapper():_p_vals(newint[64]),_size(64){cout输出是:Constructor:0x7fff5d97bb60Tempobjectcreated!Destructor:0x7fff5d97bb60Moveconstructor:0x7fff5d97bbd0Movefrom:0x7fff5d97bbc0D

c++ - 为什么 vector 的多参数构造函数采用未标记为 "explicit"的构造参数?

我在标准C++库中观察到以下vector构造函数explicitvector(size_typen);vector(size_typen,constT&value,constAllocator&=Allocator());第二个构造函数没有标记为explicit是有原因的吗?这个编译,让我感觉很糟糕voidf(vector);intmain(){f({10,"foo"});}如果我省略"foo",它不会编译,这就是我将int和字符串的一对(复合)值传递给需要的函数时所期望的字符串vector。 最佳答案 我想知道在创建临时对象时期望

c++ - std::thread constructor 传递指针和传递ref有区别吗?

创建调用成员函数的线程时,传递当前类的指针和传递引用有区别吗?从下面的示例中,方法1的行为是否与方法2相同?有什么区别吗?classMyClass{public:MyClass(){};~MyClass(){};voidmemberFunction1(){//method1std::threadtheThread(&MyClass::memberFunction2,this,argumentToMemberFunction2)//method2std::threadtheThread(&MyClass::memberFunction2,std::ref(*this),argumentT

c++ - 不同类的构造函数重载解析

考虑这段代码。structA{inti;};structB{charc;};structC{doubled;};voidf(Aa);voidf(Bb);voidf(Cc);voidg(){f({5});}这里我在f({5});中遇到了歧义。但是好像structA的构造函数是完全匹配{5}的,而第二个需要整数提升,而最后一个需要float转换。那么为什么会出现歧义呢? 最佳答案 即使序列中的第一个转换排名较差,两个转换序列最终都是用户定义的转换,因为它们都转换为用户定义的类型。[over.ics.user]1Auser-defined