c++ 枚举器可以根据同一个枚举类型中的其他枚举器进行定义吗?

为了好奇,我正在试验这个:

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++ 枚举器可以根据同一个枚举类型中的其他枚举器进行定义吗? - 代码日志