C++;11动态数组部分列表初始化(错误或误解)? 我有以下C++ 11代码: int *ipa = new int[5]{1, 2, 3};

C++;11动态数组部分列表初始化(错误或误解)? 我有以下C++ 11代码: int *ipa = new int[5]{1, 2, 3};,c++,c++11,initialization,new-operator,C++,C++11,Initialization,New Operator,我想我知道元素3和4应该是初始化的值(在本例中为0)。在Visual C++ 2013中,这正在发生。在Mingw 4.8.1中,它不是;它们正在进行默认初始化(即未初始化) 我的问题是,这是一个已知的编译器(GCC或MingW)错误吗?我搜索了所有的bug列表(并用谷歌搜索了一下),但都没有找到。或者,我是否误解了应该发生的事情?首先,如果您怀疑存在bug,那么报告它是没有害处的。这里有一个链接到和他们的。至少,您需要提供一个测试用例以及编译器的操作系统和版本。首先向SO报告这件事没有什么意义

我想我知道元素3和4应该是初始化的值(在本例中为0)。在Visual C++ 2013中,这正在发生。在Mingw 4.8.1中,它不是;它们正在进行默认初始化(即未初始化)


我的问题是,这是一个已知的编译器(GCC或MingW)错误吗?我搜索了所有的bug列表(并用谷歌搜索了一下),但都没有找到。或者,我是否误解了应该发生的事情?

首先,如果您怀疑存在bug,那么报告它是没有害处的。这里有一个链接到和他们的。至少,您需要提供一个测试用例以及编译器的操作系统和版本。首先向SO报告这件事没有什么意义,因为你可以阅读。1


正确的行为是将其余元素初始化为0。引用C++11标准草案:

§5.3.4/15创建T型对象的新表达式 按如下方式初始化该对象:[……]

  • 否则,新的初始值设定项将根据8.5的初始化规则进行解释,以进行直接初始化
§8.5.4/3列出
T
is类型的对象或参考的初始化 定义如下:[……]

  • 否则,如果
    T
    是聚合,则执行聚合初始化(8.5.1)
[……]

  • 否则,如果初始值设定项列表没有元素,则对象值已初始化
§8.5.1/7如果列表中的初始设定条款少于 聚合中有成员,然后每个成员不显式 初始化应从空初始化器列表中初始化 (8.5.4)

§8.5/5归零初始化
T
类型的对象或参考意味着:

  • 如果
    T
    是标量类型(3.9),则将对象设置为值0(零),作为整型常量表达式,转换为 T103[……]
§8.5/7初始化
T
类型的对象的值表示:[……]

  • 如果
    T
    是数组类型,则每个元素都初始化了值

  • 否则,对象初始化为零


1我启动了一个名为的元线程,以解决之前在初始化问题上缺乏研究的问题。

编译器将3和4元素初始化为0

在C++ 11中支持这个表达式。< /P>
因此,您可以初始化数组(int或char…),如:
inta[10]={0}

。更具体地说:。凯西,谢谢你。这正是我需要的信息。