c++ - 可以根据同一枚举类型中的其他枚举数来定义枚举数吗?

标签 c++ c enums

出于好奇,我正在试验这个:

enum RxqType
{
    A = (1 << 0),
    B = (1 << 1),
    C = (A | B),
    D = A+B+C
};

枚举器 C 和 D 是根据早期的枚举器定义的。这是不寻常的,所以我不确定它是否安全。我无法通过 Google 找到有关它的示例(尽管可能会忽略)。

当我在 Visual C++ 2013 和 MinGW 上 printfcout CD 似乎没问题.但我担心它是否符合标准,以及它是否会触发未定义的行为。

谁能回答我对标准一致性和未定义行为的担忧?还有什么我需要担心的吗?

最佳答案

enum RxqType
{
    A = (1 << 0),
    B = (1 << 1),
    C = (A | B),
    D = A+B+C
};

在 C 和 C++ 中这是有效的。

对于 C:

(C11, 6.2.1p7) "Each enumeration constant has scope that begins just after the appearance of its defining enumerator in an enumerator list."

对于 C++:

(C++11, 3.3.2p4) "The point of declaration for an enumerator is immediately after its enumerator-definition."

关于c++ - 可以根据同一枚举类型中的其他枚举数来定义枚举数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25864627/

相关文章:

c - 适当的 Makefile 来替换 gcc 编译/链接运行?

C - 使用 strncpy() 函数后的随机字符

c# - 将万无一失的 RequiredIf 与枚举一起使用

c# - 解析字符串以匹配枚举值

java - 使用 Java native 代码或 C++(QT、WxWidgets 等)进行独立于平台的编程

c++ - If 语句 - 不正确的评估

c++ - ERROR : list does not name a type (C++). 我不这么认为?

c++ - OpenGL 方 block 和箭头

c - 我的 recovery.c 代码正确恢复 jpeg,但未通过 cs50 检查

c# - 如何确保跨多个枚举的唯一性?