【发布时间】:2011-03-16 22:17:33
【问题描述】:
一个基本的问题,但我很难找到明确的答案。
除了方法中的赋值之外,初始化器是否列出了唯一在 C++ 中初始化类字段的方法?
如果我使用了错误的术语,这就是我的意思:
class Test
{
public:
Test(): MyField(47) { } // acceptable
int MyField;
};
class Test
{
public:
int MyField = 47; // invalid: only static const integral data members allowed
};
编辑:特别是,有没有一种用结构初始化器初始化结构字段的好方法?例如:
struct MyStruct { int Number, const char* Text };
MyStruct struct1 = {}; // acceptable: zeroed
MyStruct struct2 = { 47, "Blah" } // acceptable
class MyClass
{
MyStruct struct3 = ??? // not acceptable
};
【问题讨论】:
-
在 C++ 中,带有空括号的结构实例通常不会被清零,但会包含垃圾值。异常可能出现在调试环境或类似的受控情况中。
-
@SEinarsson - 哦...你有这方面的参考吗?整个网络都建议使用空括号来初始化 C++ 中的结构。
-
等等,现在我不太确定。我发现网上有人说我错了,但 {} 模式没有正式定义。以下问题暗示 C++ 中的结构类具有归零默认构造函数,当在类初始化程序中使用时(请参阅第二个答案)stackoverflow.com/questions/112085/… 请忽略我上面的评论,直到我能澄清这一点。
标签: c++ initialization ctor-initializer