出于好奇,我正在试验这个:
enum RxqType
{
A = (1 << 0),
B = (1 << 1),
C = (A | B),
D = A+B+C
};
枚举器 C 和 D 是根据早期的枚举器定义的。这是不寻常的,所以我不确定它是否安全。我无法通过 Google 找到有关它的示例(尽管可能会忽略)。
当我在 Visual C++ 2013 和 MinGW 上 printf
或 cout
C
和 D
似乎没问题.但我担心它是否符合标准,以及它是否会触发未定义的行为。
谁能回答我对标准一致性和未定义行为的担忧?还有什么我需要担心的吗?
最佳答案
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/