为什么会使用此代码来获取有多少枚举成员?

时间:2014-08-04 11:31:18

标签: c++ enums

在查看High Integrity C++ Coding Standard时,我发现了以下内容,

# include <cstdint>
// Compliant
enum Team : int32_t {
    Anna
    , Bob
    , Joe
    , John
    , Sandra
    , Tim
    , Team_First = Anna
    , Team_Last = Tim
    , Team_Size
};
int32_t performance [ Team_Size ];

我不明白为什么Team_Size会在Team_First和Team_Last之后出现。如果以这种方式使用,那么Team_Size将比实际存在的人高2。我已在网站上要求澄清,但在等待的时候,想知道这里是否有人有任何线索。

1 个答案:

答案 0 :(得分:3)

来自C++标准[dcl.enum]/2

  

...如果第一个枚举器没有初始化器,则相应常量的值为零。没有初始值设定项的枚举器定义为枚举数提供了通过将前一个枚举数的值增加1而获得的值。

Team_Last初始化为Tim的值。 Team_Size == Team_Last+1 == Tim+1,这是枚举器中元素的数量,不包括哨兵元素(因为枚举值从0开始)。