【发布时间】:2015-02-07 12:39:51
【问题描述】:
我有一个包含数组成员的类,我想将其初始化为全零。
class X
{
private:
int m_array[10];
};
对于局部变量,有一种简单的零初始化方法(参见here):
int myArray[10] = {};
此外,类成员 m_array 显然需要初始化,因为默认初始化 int 只会留下随机垃圾,正如 here 解释的那样。
但是,我可以看到对成员数组执行此操作的两种方法:
带括号:
public:
X()
: m_array()
{}
带大括号:
public:
X()
: m_array{}
{}
都正确吗?两者在 C++11 中有什么区别吗?
【问题讨论】:
-
你是如何测试的?使用
gcc -std=c++98编译时,我收到一条消息“警告:扩展初始化列表仅适用于 -std=c++11 或 -std=gnu++11 [默认启用]”,甚至无需添加-pedantic. -
我刚刚用 C++ 4.8.1 选项快速检查了ideone.com,我不知道他们使用了什么标志,所以我删除了我的声明。
-
Visual Studio 2013 为第二个选项输出spurious 警告消息:
warning C4351: new behavior: elements of array 'X::m_array' will be default initialized
标签: c++ initialization initialization-list array-initialization