【发布时间】:2017-06-06 11:02:32
【问题描述】:
我已尝试阅读 C++ 文档,但我发现它很难理解。我喜欢像这样对我的结构进行零初始化:
MyStruct myStruct = {};
但是如果我有这个结构作为类成员,我如何在构造函数中进行零初始化?
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() : myStruct{} {} -
这个问题是this one 的一个微妙变体。我可以有力地证明它们是重复的,但不足以行使我的单方面投票权。
-
但是由于XY问题太常见了,检查也不是没有道理的。
-
@SamVarshavchik 当我尝试它们时,它们都可以工作,但是 a) VS 通常对你的零初始化非常宽容,但是优化级别可以改变这一点,并且 b) 我想确定什么我写的是正确和便携等。