我想知道以下形式的初始化:
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)指定"的完整表达式的在初始化子句在它们出现的顺序被评估",但我看不到任何需要对每个聚集元件在评估下一个之前,从其初始化子句的结果初始化.
| 归档时间: |
|
| 查看次数: |
918 次 |
| 最近记录: |