use*_*569 9 c++ initialization new-operator c++11
我有以下C++ 11代码:
int *ipa = new int[5]{1, 2, 3};
我认为我理解元素3和4应该是值(在这种情况下为0)初始化.在Visual C++ 2013中,正在发生这种情况.在Mingw 4.8.1中它不是; 它们被默认初始化(即未初始化).
我的问题是,这是一个已知的编译器(GCC或MingW)错误吗?我搜索了所有错误列表(和谷歌搜索)是徒劳的.或者,我是否有点误解了应该发生的事情?
小智 1
首先,如果您怀疑存在错误,报告它没有什么坏处。这是GCC bugzilla及其错误报告说明的链接。至少,您需要提供测试用例以及编译器的操作系统和版本。首先向 SO 报告它没有什么意义,因为您可以在此处阅读有关初始化的所有内容。1
\n\n正确的行为是剩余元素初始化为0。引用C++11草案标准:
\n\n\n\n\n\xc2\xa75.3.4/15 一个新表达式创建 T\n 类型对象的
\n\n\n
\n\n- 否则,新的初始化程序将根据 8.5 的直接初始化规则进行解释。\n
\xc2\xa78.5.4/3 对象或类型引用的列表初始化
\n\nT定义如下:[...]\n
\n\n- 否则,如果\n
T是聚合,则执行聚合初始化 (8.5.1)。[...]
\n\n\n
\n\n- 否则,如果初始值设定项列表没有元素,则对该对象进行值初始化。\n
\xc2\xa78.5.1/7 如果初始化子句较少列表中的少于聚合中的成员,则每个未显式初始化的成员应从空初始化器列表初始化\n (8.5.4 )。
\n\n\xc2\xa78.5/5 对类型的对象或引用进行零初始化
\n\nT意味着:\n
\n\n- 如果\n
T是标量类型(3.9),则将对象设置为值 0(零),作为整型常量表达式,转换为\n T;103 [...]\xc2\xa78.5/7 对type 的对象进行值初始化
\n\nT意味着:[...]\n
\n- \n
如果
T是数组类型,则每个元素都是值初始化的;- \n
否则,该对象将被零初始化。
1 我已经启动了一个名为“我们需要有关 C++ 初始化的规范问题吗?”的元线程。解决初始化问题缺乏先前研究的问题。
\n