readability-enum-initial-value

强制枚举器初始化的一致风格,涵盖三种风格:无、仅第一个或所有显式初始化。

如果枚举扩展了新的枚举器,并且这些枚举器隐式地获得其整数表示,则定义枚举器初始化值的不一致风格和严格性可能会导致问题。

以下三种情况被接受

  1. 枚举器被显式初始化。

  2. 恰好第一个枚举器被显式初始化。

  3. 所有枚举器都被显式初始化。

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,