数组中的初始化列表
Initialization lists in arrays
所以,如果我这样做:
int a[5];
数组将包含垃圾值。
如果我这样做:
int a[5] = {};
它现在将包含所有的零,即使我们没有真正用0初始化这些值中的任何一个。
那么,这里发生了什么?
有关更多信息,请参阅:http://www.cplusplus.com/doc/tutorial/arrays/
默认情况下,本地作用域的常规数组(例如,在函数中声明的数组)未初始化。这意味着它的任何元素都没有设置为任何特定的值;在声明数组时,它们的内容是不确定的。
但是,数组中的元素在声明时可以显式初始化为特定值,方法是将这些初始值括在大括号{}中。初始值设定项甚至可以没有值,只有大括号:
int a[5] = { };
这创建了一个由五个int值组成的数组,每个值都用零初始化
您正在用0初始化它。
类似地,
int a[5] = {1};
意味着第一个元素用1初始化,其余元素用0初始化。
int a[5];
请求一个足够存储5个整数的连续内存块,但不执行任何初始化。
int a[5] = {};
请求足够存储5个整数的零初始化内存的连续块。
请参阅此SO问题/答案。
"发生了什么"是什么意思?你刚刚告诉我们发生了什么
第二个例子zero初始化值,而第一个没有!
它现在将包含所有的零,即使我们没有真正用0初始化这些值中的任何一个。
是的,你写了= {}
。这就是它的意思。
相关文章:
- 复制列表初始化的隐式转换的等级是多少
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- C++11 中的混合列表初始化
- 我可以列表初始化 std::vector 并完美转发元素吗?
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- C++20 从括号中的值列表初始化聚合,不支持内部数组
- 如何在向量列表初始化时避免对象复制以及如何延长临时的生存期
- 默认参数和空列表初始化
- 如何在列表初始化中放置额外的语句?
- C++列表初始化允许多个用户定义的转换
- 列表初始化是否将原子初始化为零
- 使用可变模板列表初始化数组,并放置new
- 使用整数初始化列表初始化长双精度的向量
- 直接列表初始化的自动规则
- 使用初始化列表初始化unique_ptr的容器,继续
- 如何修复"非聚合无法使用初始值设定项列表初始化" <map>
- 直接列表初始化和复制列表初始化之间的差异
- 为什么我可以在不使用赋值运算符的情况下使用列表初始化普通数组
- C++ - 使用类中的初始值设定项列表初始化动态集