Chr*_*isB 5 c++ arrays initialization language-lawyer default-initialization
默认初始化数组时,其元素默认初始化的顺序是 C++ 标准定义的吗?
\n举个例子,下面的C++程序是否保证打印严格升序的内存地址?
\n#include <iostream>\nstruct Foo{\n Foo() {\n std::cout << this << std::endl;\n }\n};\nint main() {\n delete[] new Foo[10];\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n我在标准的 9.4.1 初始化器,常规下找到了以下内容:
\n\n\n7 默认初始化 T 类型的对象意味着:(...)
\n(7.2)\xe2\x80\x94 如果 T 是数组类型,则每个元素都默认初始化。
\n
我是否正确地假设这意味着它未指定,或者文档中的其他地方也没有对此进行澄清?
\n这个答案声称它已经定义(根据(a)),但是(afaict)没有提供任何证据。
\n请注意,我并不是试图在初始化之前引用数组本身(Can a (C/C++) array optimization reference itself?),而只是关心初始化顺序的可观察到的副作用。
\n最新草案 (N4917) 在 9.4.2 聚合第 7 项 ([dcl.init.aggr]) 下有这样的规定:
聚合元素的初始化按元素顺序进行评估。也就是说,与给定元素相关的所有值计算和副作用都按顺序排列在其后面的任何元素的计算和副作用之前。
所以你可以依赖订单。