C 11 引入了 std::array 数据结构,它类似于 C 风格的数组,但提供了额外的功能,例如 template-基于类型规范和编译时大小确定。然而,出现了一个常见问题:在没有显式初始化的情况下声明 std::array 是否会导致每个元素的默认初始化?
根据 C 语言规范 (§8.5/11),任何没有显式初始化程序的对象进行默认初始化。这包括 std::array 对象。默认初始化会初始化非类类型的对象,但对于类类型的对象(std::array 就是),它会调用默认构造函数。
但是,cppreference 文档提到默认构造函数“default-构造或复制构造数组的每个元素。”这意味着 std::array 可能不会对每个元素执行默认初始化。
答案:
是的,默认情况下,声明一个 std::array 而不进行显式初始化将按照 C 11 规范默认初始化所有元素。此行为适用于零大小和非零大小的数组。
值初始化与默认初始化:
请注意值初始化 (8.5/7)与默认初始化不同。值初始化为元素分配其各自类型的默认值,对于基本类型来说通常为零或 false。要显式执行值初始化,可以使用带有空初始值设定项的大括号:
<code class="cpp">std::array<int, 13> cxx_style_array{}; // Value-initialize all elements to 0</code>
这显式地将所有元素设置为 int 的默认值,即 0。
以上是std::array 在 C 11 中是默认初始化的吗?的详细内容。更多信息请关注PHP中文网其他相关文章!