αλε*_*λυτ 9 c++ array-initialization language-lawyer
我有以下代码片段:
int i[] = {42, i[0]};
Run Code Online (Sandbox Code Playgroud)
是允许这样的初始化还是导致未定义的行为?
三大编译器(GCC,铛,MSVC)给我42的i[1].因此看起来合法,但我希望从这个案例的标准中看到一个引用.
YSC*_*YSC 11
是的,它定义明确.
int i[] = {42, i[0]};
Run Code Online (Sandbox Code Playgroud)
这是聚合1初始化2.聚合初始化遵循此规则:
[dcl.init.aggr]/6聚合元素的初始化按元素顺序进行评估.也就是说,与给定元素相关联的所有值计算和副作用在按顺序跟随它的任何元素之前排序.
1) http://eel.is/c++draft/dcl.init.aggr#1
2) http://eel.is/c++draft/dcl.init.aggr#3