草庐IT

initialization

全部标签

c++ - 在 C++ 中初始化映射并将类成员变量设置为空?

我有一个带有两个成员变量的C++类std::mapa;和std::setb;我所在大学使用的样式检查器要求在类的构造函数中初始化所有成员变量。a和b这两个成员变量如何在所在类的构造函数中初始化为空? 最佳答案 像这样:classA{public:A():s(),m(){}std::sets;std::mapm;}; 关于c++-在C++中初始化映射并将类成员变量设置为空?,我们在StackOverflow上找到一个类似的问题: https://stackove

c++ - 当用于 "new"初始化时, () 和 {} 是否总是等价的?

有一个帖子处理parenthesesornotafterthetypename使用新的时候。但是这个呢:如果'Test'是一个普通类,有什么区别:Test*test=newTest();//andTest*test=newTest{};此外,假设Test2有一个Value类型参数的构造函数,它是否总是等同于写:Valuev;Test2*test2=newTest(v);//andTest2*test2=newTest{v}; 最佳答案 在涉及std::initializer_list的上下文中可能存在差异,例如:案例1-()和{}#

c++ - 有没有办法让 C++ 结构值初始化所有 POD 成员变量?

假设我有一个同时具有POD和非POD成员变量的C++结构:structStruct{std::stringString;intInt;};为了让我的程序产生可重现的行为,我想在构造时初始化所有成员变量。我可以为此使用初始化列表:Struct::Struct():Int(){}问题是一旦我需要更改我的结构并添加一个新的POD成员变量(比如boolBool),我就有忘记将它添加到初始化列表的风险。那么新的成员变量在结构构造时不会被值初始化。我也不能使用memset()技巧:Struct::Struct(){memset(this,0,sizeof(*this));//canbreaknon

c++ - 当有一个带有默认参数的构造函数时是否有2次初始化

这个问题在这里已经有了答案:C++Initialisingfieldsdirectlyvsinitialisationlistindefaultconstructor(3个答案)关闭4年前。我的问题是关于在构造函数中也有默认参数的情况下如何初始化带有初始化程序的成员数据。classInputPlay{public:InputPlay(std::strings="test"):_s(s){};private:std::string_s="default";};问题:调用构造时,变量_s是否会进行两次初始化?又名_s将由字符串文字default初始化,然后由构造函数中的默认参数“test”

c++ - 如何在 C++ 对象中初始化数组

看完HowtoinitializeanarrayinC,特别是:Don'toverlooktheobvioussolution,though:intmyArray[10]={5,5,5,5,5,5,5,5,5,5};我试过这样的:#includeclassSomething{private:intmyArray[10];public:Something(){myArray[10]={5,5,5,5,5,5,5,5,5,5};}intShowThingy(intwhat){returnmyArray[what];}~Something(){}};intmain(){SomethingTh

c++ - 字符四 [4] = "four";该语句的正确语义是什么?

intmain(void){charfour[4]="four";return0;}当编译为C++程序时,G++报告xxx.cpp:Infunctionintmain():xxx.cpp:3:错误:字符数组的初始化字符串太长当编译一个C程序时,GCC没有报错。在我看来,赋值正确地将所有4个字节复制到变量中,正如我预期的那样。所以我的问题归结为......在C中观察到的行为是否正确,或者我是否在某处触及未定义的行为,还是完全不同? 最佳答案 简短回答:您的代码是有效的C,但不是有效的C++。长答案:"four"实际上是5个字符长-为您

c++ - 如果构造函数参数与 C++ 中的成员变量同名怎么办?

首先是一些代码:classCInner{public:CInner(constCInner&another){//implhere}private://somemembervariables}classCOuter{public:COuter(constCInner&inner):inner(inner){}private:CInnerinner;}是的,在COuter::COuter(constCInner&)中,参数与成员变量同名。在VC++中工作-VC++认为用参数初始化成员变量是唯一合理的,这就是发生的事情-CInner::inner用参数初始化。但是当用GCC编译它时,它会以

c++ - 成员字段,构建顺序

在C++中,当执行如下所示的操作时,是否保证构造顺序?Logger::Logger():kFilePath_("../logs/runtime.log"),logFile_(kFilePath_){//...} 最佳答案 是的,构建的顺序总是有保证的。但是,不能保证它与对象在初始化列表中出现的顺序相同。成员变量是按照它们在类主体中声明的顺序构造的。例如:structA{};structB{};structS{Aa;Bb;S():b(),a(){}};a先被构建,然后是b。成员变量在初始化列表中出现的顺序无关紧要。

c++ - 非静态常量数据成员

如何在C++中定义类的非静态常量数据成员?如果我尝试编译以下代码:classa{public:voidprint(){cout我得到一个错误ISOC++forbidsinitializationofmember‘y’ 最佳答案 在C++03中,您可以在构造函数中使用成员初始化列表来初始化类的const字段。例如:classa{public:a();voidprint(){cout注意构造函数之后的语法:y(2)。这告诉C++将字段y初始化为值2。更一般地说,您可以使用此语法将类的任意成员初始化为您希望它们具有的任何值。如果您的类包含

c++ - clang 中的别名 std::initializer_list

我想使用std::initializer_list的别名来代替它本身:#includetemplateusingInitializerList=std::initializer_list;//note:candidatetemplateignored:couldn'tinfertemplateargument'T'templatevoidf(InitializerListlist){}intmain(){//error:nomatchingfunctionforcallto'f'f({1,2,3,4,5});}该代码使用gcc&cl没问题。但是,使用clang我得到一个错误::11:3