Ben*_*Ben 2 c++ language-lawyer stdarray
如果我std::array<T, N>用大括号构造 a 并给它少于N项目,那么这些项目是否为零初始化?(或者它们是否保留默认初始化?)如果我给它零个项目(即= {}),那么我相信它会将所有元素零初始化。
我找不到这个简单问题的明确答案。由于std::array在像 一样使用时使用聚合初始化std::array<int, 2> x = { 1 };,因此导致聚合初始化规则的https://en.cppreference.com/w/cpp/language/aggregate_initialization 。在那里,我看到的关于这种情况的唯一提及是“如果指定了数组的大小并且它大于字符串文字中的字符数,则其余字符将被零初始化。” 但这是在“字符数组”部分中,所以看起来通常不是这样。另一方面,用作constexrpUB 检测器表明它们已归零: https: //godbolt.org/z/zE9xKvbrq
有关的:
聚合初始化将没有初始化器的元素归零(准确地说是值初始化)。
\n\n\n\n对于非联合聚合,每个不是显式初始化元素的元素都按如下方式初始化:
\n\xe2\x80\x94 如果元素具有默认成员初始值设定项 ([class.mem]),则从该初始值设定项初始化该元素。
\n\xe2\x80\x94 否则,如果元素不是引用,则从空初始值设定项列表 ([dcl.init.list]) 复制初始化该元素。
\n\xe2\x80\x94 否则,程序格式错误。
\n
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |