bugprone-non-zero-enum-to-bool-conversion

检测将 enum 类型隐式或显式转换为 bool 的情况,其中 enum 类型没有零值枚举器。如果 enum 仅用于保存等于其枚举器的值,那么转换为 bool 将始终导致 true 值。这可能导致不必要的代码,降低可读性和可维护性,并可能导致错误。

如果 enum 用于存储其他值(用作位掩码或故意初始化为零),则可能会产生误报。为了处理这些情况,可以使用 // NOLINT 或先将类型转换为基础类型,然后再转换为 bool

重要的是要注意,如果枚举类型定义不可用,则此检查不会生成警告。此外,此检查支持 C++11 枚举类。

总的来说,此检查通过识别和标记枚举类型到布尔类型的隐式或显式转换可能导致潜在问题的情况,来提高代码质量和可读性。

示例

enum EStatus {
  OK = 1,
  NOT_OK,
  UNKNOWN
};

void process(EStatus status) {
  if (!status) {
    // this true-branch won't be executed
    return;
  }
  // proceed with "valid data"
}

选项

EnumIgnoreList

此选项用于在检查隐式/显式转换为 bool 时忽略某些枚举类型。它接受用分号分隔的 (完全限定) 枚举类型名称或与枚举类型名称匹配的正则表达式列表。默认值为一个空字符串,表示不会忽略任何枚举。