零初始化类成员,它是C++11中的结构 我试过阅读C++文档,但我觉得很难跟上。我喜欢像这样初始化我的结构: MyStruct myStruct = {};

零初始化类成员,它是C++11中的结构 我试过阅读C++文档,但我觉得很难跟上。我喜欢像这样初始化我的结构: MyStruct myStruct = {};,c++,c++11,struct,C++,C++11,Struct,但是如果我将这个结构作为类成员,我如何在构造函数中初始化零呢 struct MyStruct { int x; int y; } class MyClass { MyStruct mMyStruct; public: MyClass(); } // is this fine? MyClass::MyClass() : mMyStruct() {} // or this? MyClass::MyClass() : mMyStruct({}) {} // or do I n

但是如果我将这个结构作为类成员,我如何在构造函数中初始化零呢

struct MyStruct
{
 int x;
 int y;
}

class MyClass
{
 MyStruct mMyStruct;
public:
 MyClass();
} 



// is this fine?
MyClass::MyClass()
 : mMyStruct()
{}

// or this?
MyClass::MyClass()
 : mMyStruct({})
{}

// or do I need this?
MyClass::MyClass()
 : mMyStruct()
{
 mMyStruct = {};
}

你可以用这个符号

MyClass::MyClass()
 : mMyStruct{}
{
}

你知道,这些文档并没有那么糟糕。

一种方法是:

class MyClass
{
    MyStruct mMyStruct = {};
public:
    MyClass();   // actually unnecessary
};

为什么你会感觉到把一切都归零的冲动?如果一个特定类的实例应该总是零初始化,那么这应该由该类的默认构造函数来完成。我可以有力地证明它们是重复的,但不足以行使我的单边投票权。但由于XY问题如此普遍,检查也不是不合理的。@SamVarshavchik当我尝试它们时,它们都起作用,但VS通常对你零初始化非常宽容,但是优化水平可以改变这一点,我想确保我所写的是正确的和可移植的等等。很酷,但仅仅因为我好奇,在我的问题工作中,做前两个中的任何一个?你知道,文档并没有那么糟糕。真正地这不是很容易遵循的,尤其是对于那些不是C++标准化专家的人。再说一次,人们可能会对语言本身说同样的话@wiki有一个讨论区。请在那里报告您的担忧。我在那里看到过许多知名度很高的用户,他们乐于改进。如果没有必要,就不要写它。@IInspectable:如果出现这两种情况中的任何一种,代码就不再是多余的或不必要的,所以这一点就没有意义了。@BoundaryPosition如果没有人写不必要的东西,这不是评论。@yack:不知道你的意思。我不是来这里进行人身攻击的,@IInspectable。也许你可以重新措辞你的评论,以便在不诉诸于某一观点的情况下阐明你的观点?