在初始化构造函数时重复字段

时间:2018-09-27 20:40:35

标签: c

很抱歉重复。我不知道怎么用谷歌搜索。

是否允许在const结构的初始化列表中重复字段?

示例:

const struct first _first = {
    .value = 1,
    .value = 2, /* same field again */
};

const struct second _second = {
    .first = _first,
    .first.value = 3, /* and again */
};

第二种情况当然更重要。

1 个答案:

答案 0 :(得分:2)

这是允许的,以后的初始化程序将覆盖之前的所有初始化程序。

这在C标准的6.7.9p19部分中指定:

  

初始化应按初始化列表顺序进行,每个   为覆盖所有子对象的特定子对象提供的初始化程序   先前列出的同一子对象的初始化程序; 151)全部   未显式初始化的子对象应被初始化   隐式地与具有静态存储持续时间的对象相同。

     

151)被覆盖的子对象的任何初始化程序,因此不能   初始化该子对象可能根本不会进行评估。