该应用程序是用C ++ 98编写的,我目前无法更改它。情况是这样的:
struct foo
{
int x;
int y;
int z;
}
class myClass
{
public:
myClass();
struct foo bar;
int baz;
};
myClass::myClass() :
bar({0}),
baz(0)
{
//something else.
}
int main(int argc, char** argv)
{
myClass* thing = new myClass();
cout << thing.bar.z << endl; //want a guaranteed zero here.
}
以上作品,但产生:
warning: extended initializer lists only available with -std=c++11 or -std=gnu++11.
这是完全可以预料的。我无法使用c ++ 98在初始化列表中执行bar({0})
。问题仍然是正确的方法。
我可以想到将工作的几种方式 - memset,在构造函数中按字段分配值,使用结构的默认复制构造函数分配,等等。我不知道哪个方式被认为是最正确的#39;但在这种情况下。