readability-enum-initial-value¶
强制枚举器初始化的一致风格,涵盖三种风格:无、仅第一个或所有显式初始化。
如果枚举扩展了新的枚举器,并且这些枚举器隐式地获得其整数表示,则定义枚举器初始化值的不一致风格和严格性可能会导致问题。
以下三种情况被接受
无枚举器被显式初始化。
恰好第一个枚举器被显式初始化。
所有枚举器都被显式初始化。
enum A { // (1) Valid, none of enumerators are initialized.
a0,
a1,
a2,
};
enum B { // (2) Valid, the first enumerator is initialized.
b0 = 0,
b1,
b2,
};
enum C { // (3) Valid, all of enumerators are initialized.
c0 = 0,
c1 = 1,
c2 = 2,
};
enum D { // Invalid, d1 is not explicitly initialized!
d0 = 0,
d1,
d2 = 2,
};
enum E { // Invalid, e1, e3, and e5 are not explicitly initialized.
e0 = 0,
e1,
e2 = 2,
e3, // Dangerous, as the numeric values of e3 and e5 are both 3, and this is not explicitly visible in the code!
e4 = 2,
e5,
};
此检查对应于 CERT C 编码标准建议 INT09-C. 确保枚举常量映射到唯一值.
cert-int09-c 作为此检查的别名重定向到此处。
选项¶
- AllowExplicitZeroFirstInitialValue¶
如果设置为 false,则第一个枚举器不能显式初始化为字面量
0
。默认值为 true.enum F { f0 = 0, // Not allowed if AllowExplicitZeroFirstInitialValue is false. f1, f2, };
- AllowExplicitSequentialInitialValues¶
如果设置为 false,则不允许显式初始化为连续值。默认值为 true.
enum G { g0 = 1, // Not allowed if AllowExplicitSequentialInitialValues is false. g1 = 2, g2 = 3,