(C/C++)数组初始化可以引用自身吗?

Pee*_*oot 30 c++

我想知道以下形式的初始化:

int  array[] = {
v - 1,
array[0] + 1
} ;
Run Code Online (Sandbox Code Playgroud)

在第二个元素的初始化中,使用第一个元素的值,但尚未初始化整个数组.这恰好用g ++编译,但我不确定这是否实际上是可移植的和定义良好的构造?

Seb*_*ach 16

见3.3.2声明要点:

声明的声明就在其完整的声明者(第8条)之后和初始化者(如果有的话)之前,除非如下所述.[例如:

int x = 12;
{ int x = x; }
Run Code Online (Sandbox Code Playgroud)

这里第二个x用它自己的(不确定的)值初始化. - 末端的例子]

所以你正确地引用了数组,它的名字在之后是已知的=.

然后,8.5.1聚合:

聚合是一个数组或类[...]

17:初始化子句中的完整表达式按它们出现的顺序进行评估.

但是,我没有看到什么时候将评估值实际写入数组,因此我不会依赖于此,甚至会将代码声明为未定义好.


Mik*_*our 13

据我所知,这个定义明确.标准(C++ 11,8.5.1/17)指定"的完整表达式的在初始化子句在它们出现的顺序被评估",但我看不到任何需要对每个聚集元件在评估下一个之前,从其初始化子句的结果初始化.