C++11动态数组部分列表初始化(错误或误解)
C++ 11 Dynamic Array Partial List Initialization (Bug or Misunderstanding)?
我有以下C++11代码:
int *ipa = new int[5]{1, 2, 3};
我想我理解了元素3和4应该是初始化的值(在本例中为0)。在Visual C++2013中,这种情况正在发生。在Mingw 4.8.1中,情况并非如此;它们被默认初始化(即未初始化)。
我的问题是,这是一个已知的编译器(GCC或MingW)错误吗?我搜索了所有的bug列表(并在谷歌上搜索),但都是徒劳的。或者,我是否误解了应该发生的事情?
首先,如果您怀疑存在错误,那么报告它没有害处。下面是GCC错误zilla及其错误报告说明的链接。至少,您需要提供一个测试用例、操作系统和编译器版本。首先向SO报告它没有什么意义,因为您可以在这里阅读有关初始化的全部内容1
正确的行为是将其余元素初始化为0。引用C++11标准草案:
§5.3.4/15创建T类型对象的新表达式按如下方式初始化该对象:[…]
- 否则,新初始值设定项将根据8.5的初始化规则进行解释,用于直接初始化
§8.5.4/3
T
类型的对象或引用的列表初始化为定义如下:[…]
- 否则,如果
T
是聚合,则执行聚合初始化(8.5.1)[…]
- 否则,如果初始值设定项列表没有元素,则对象被值初始化
§8.5.1/7如果列表中的初始值设定项子句少于聚合中有个成员,则每个成员都不是显式的initialized应从空的初始化器列表中初始化(8.5.4).
§8.5/5对于零初始化
T
类型的对象或引用意味着:
- 如果
T
是标量类型(3.9),则将对象设置为值0(零),作为积分常量表达式,并将其转换为T103[…]§8.5/7对于值初始化类型为
T
的对象意味着:[…]
如果
T
是数组类型,则每个元素都被值初始化;否则,对象初始化为零。
1我已经启动了一个名为"我们需要一个关于C++初始化的规范问题吗?"的元线程?以解决先前在初始化问题方面缺乏研究的问题
编译器将初始化3和4元素为0。
在c++11中,支持这个表达式。
因此,您可以初始化数组(int或char…),如:int a[10] = {0};
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- C++11动态数组部分列表初始化(错误或误解)
- 我不断收到错误:运行此代码时重新定义'i'。对局部变量的误解
- 有符号整数溢出为负数:这是一个编译器错误,还是我误解了优化
- cplusplus.com给出了哪些错误、误解或糟糕的建议
- 类误解和bad_alloc错误或错误的初始化