草庐IT

Initialization

全部标签

c++ - 用数组初始化一个类

我有这样一个类:classMyClass{MyClass(double*v,intsize_of_v){/*dosomethingwithv*/};};我的问题:有什么方法可以在不定义double数组并将其提供给构造函数的情况下初始化此类?我想做这样的事情:autox=MyClass({1.,2.,3.},3); 最佳答案 它叫做listinitialization你需要一个std::initilizer_list构造函数,将在您的MyClass中实现。#includeclassMyClass{double*_v;std::size

Hadoop:DataNode启动失败:Initialization failed for Block pool

一、问题发现​在启动Hadoop集群后,发现原本应该是启动三台机子的数据节点,结果只有一台node2成功启动,另外两台(node1、node3)并没有启动,如下两图所示:问题描述:​确认配置信息没问题后,查看Hadoop下hdfs目录中的DataNode日志(配置文件中指定,比如笔者安装Hadoop所在路径为/export/server/hadoop/logs/hdfs),DataNode的日志文件为:cat该文件发现:ERRORorg.apache.hadoop.hdfs.server.datanode.DataNode:InitializationfailedforBlockpoolreg

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。成员变量在初始化列表中出现的顺序无关紧要。