草庐IT

Initialization

全部标签

c++ - 为什么变量用最大值而不是零初始化

多年没有用C++,现在用test写c++项目。当我开始调试时,我发现奇怪的是,默认情况下变量没有初始化为零。例如,当我观察我的类未初始化变量(unsignedint)时,我看到它的值3452816845instedofexpectedzeo...这会导致单元测试出错。我使用这样的初始化:TEST_METHOD(TestPlus){Entity*entity=newEntity();entity->mCreateOperator(entity->Plus);entity->SetContactValue(1);entity->SetContactValue(2);entity->mPro

c++ - 在类中初始化字段的原因是什么?

在C++中,可以直接在类中初始化类字段的值,例如:classX{inta=5;}这是什么原因呢?它在哪里有用?默认的ctor做的完全一样。而且我似乎无法使用位掩码(inta:3)初始化值。 最佳答案 来自theauthority(这与早期的标准提案N2756非常相似):In-classmemberinitializersInC++98,onlystaticconstmembersofintegraltypescanbeinitializedin-class,andtheinitializerhastobeaconstantexpre

c++ - 在不使用默认构造函数或赋值的情况下在构造函数中初始化数组

考虑:structA{A(int);A(constA&);};structB{Afoo[2];B(constA&x,constA&y):foo{x,y}/*HEREISTHEPROBLEM*/{}};我期望它能工作,因为我在GCC4.3中使用C++0x支持,据称它支持初始化列表。没有快乐。我有一个没有默认构造函数的类A。这是没有商量余地的。违约后分配不是一种选择。我正在尝试创建使用A的B。B::foo可能不是std::vector。如何在B(...)中初始化B::foo,只构造一次它的元素?目前,我正在考虑将B替换为structB{Afoo_a;Bfoo_b;A*foo(){asser

c++ - 使用非默认构造函数初始化成员类

我正在尝试制作一个具有包含textPanel类的SimpleWindow类的图形用户界面:classtextPanel{private:std::stringtext_m;public:textPanel(std::stringstr):text_m(str){}~textPanel();};classSimpleWindow{public:SimpleWindow();~SimpleWindow();textPaneltext_panel_m;};SimpleWindow::SimpleWindow():text_panel_m(std::stringtemp("defaultval

c++ - RAII如何应用于需要扩展初始化的类成员?

据我所知,当RAII惯用语应用于类所需的资源时(如果我错了请纠正我),需要资源的类应该定义适当类型的成员,并且它的析构函数将当using类实例被销毁时自动调用,如下所示:classSkybox{public:Skybox():tex_(...){}private:Texturetex_;};除了使用智能指针在堆上分配资源之外,如果资源成员需要在Skybox构造函数中执行一些代码,那么在初始化资源?例如:classSkybox{public:Skybox(conststd::string&fileName);private:Texturetex_;}Skybox::Skybox(cons

c++ - 如果显式定义了构造函数,是否必须初始化类成员?

我的大学课本上说:Whenaconstructorisdeclaredforaclass,initializationoftheclassobjectsbecomesmandatory.链接到specificpageofthebook.我们可以声明什么都不做的构造函数,因此初始化肯定不是强制性的,是吗?如果不是,作者的意思是在风格上如果我们显式声明构造函数,我们应该初始化类成员,也就是说,它是作为规则还是指南? 最佳答案 如果出现以下情况,我们必须在构造函数中初始化成员:成员没有默认构造函数。成员是reference/const-r

c++ - 在 C++ 中初始化变量的正确方法是什么

我有以下代码:boolc(a==b);和boolc{a==b};其中a和b是一些相同类型的变量。我想知道,以上两个初始化有什么区别,在什么情况下应该首选哪个?我们将不胜感激。 最佳答案 两种形式都是directinitialization.使用花括号{}进行初始化检查缩小转换,如果发生此类转换,则会生成错误。不同于()。(gccissuesawarningbydefault并且需要-Werror=narrowing编译器选项以在发生缩小时生成错误。)花括号{}的另一个用途是统一初始化:使用相同的语法初始化有和没有构造函数的两种类型,

c++ - 为什么不允许 "inlined"静态常量,整数除外?

PossibleDuplicateWhycan'tIhaveanon-integralstaticconstmemberinaclass?structExample{staticconstintOne=1000;//LegalstaticconstshortTwo=2000;//IllegalstaticconstfloatThree=2000.0f;//IllegalstaticconstdoubleFour=3000.0;//IllegalstaticconststringFive="Hello";//Illegal};#2、#3、#4和#5是非法的吗?我想我知道#5的原因:编译器

c++ - 内置类型的成员是否默认初始化?

我最近在我的一个类中遇到了一个问题,因为我没有在我的构造函数初始化列表中设置指向NULL的指针,所以当我运行程序时它包含垃圾。然而,虽然我知道在堆栈上声明但未初始化的内置类型的实例将包含随机值,但我很确定我在某处读到过,因为类成员未明确放置在构造函数初始化列表中调用它们的默认构造函数,对于内置类型,这也会发生,插入代码,如大多数平台上的伪构造函数,将它们设置为零我还认为我会在某些地方的“ThinkinginC++”中阅读在构建对象之前的某些情况下,其内存将被清零,但我在这两种情况下似乎都错了。谁能帮我确认一下,a)内置类型成员的初始化是否与用户定义的构造函数是否定义有任何关系,b)内置

c++ - 如何正确初始化不可默认构造的类成员?

假设我定义了一个类Foo,它没有实现默认构造函数。此外,我还有一个Bar类,它“拥有”一个Foo的实例:classFoo(){private:intm_member;public:Foo(intvalue):m_member(value){}};classBar(){private:Foom_foo;public:Bar(/*...*/){intsomething;/*lotsofcodetodetermine'something'*//*shouldinitializem_footo'Foo(something)'here*/}};显示的代码不会运行,因为Bar正在尝试调用Foo的默