作者:等待1314578 | 来源:互联网 | 2022-12-07 19:55
我有以下代码片段:
int i[] = {42, i[0]};
是允许这样的初始化还是导致未定义的行为?
三大编译器(GCC,铛,MSVC)给我42
的i[1]
.因此看起来合法,但我希望从这个案例的标准中看到一个引用.
1> YSC..:
是的,它定义明确.
int i[] = {42, i[0]};
这是聚合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