比方说,我定义了一个包含一些简单POD成员的类,而且我懒得写出默认构造函数来将所有类成员初始化为默认值。相反,我要求编译器为我执行此操作:
class Foo
{
public:
Foo() = default;
int x;
// etc.
}
我已经使用MSVC进行了测试,并且x
被此自动生成的构造函数未初始化为零:对于类Foo
的本地对象,{{1 }}设置为0xcccccccc,这是我期望的未初始化堆栈变量的值。
我的问题是是否存在一种符合标准的方法来说服编译器自动对这些POD成员进行零初始化。我之所以说“符合标准”,是因为我需要能够依靠其他编译器来表现类似的行为。我之所以说“自动”,是因为如果可以避免的话,我不想写出列出每个类成员的构造函数。
答案 0 :(得分:4)
您可以像这样使用类内成员初始化器:
class Foo {
int x = 0;;
int y{}; // same effect.
};
优点是可以在以后添加的构造函数之间保持一致性。 Core Guidelines C.45也推荐这种方法。
在头文件中声明此类时,可能会产生不利影响,因为必须知道并且不能向前声明以这种方式初始化的所有成员变量的类型。
答案 1 :(得分:1)
他们有两种解决方案:
Foo an_obj{};
代替Foo an_obj;
。