为什么要使用这段代码来获取枚举成员的数量?

Why would this code be used to get how many enum members there are?

本文关键字:枚举成员 获取 代码 段代码 为什么      更新时间:2023-10-16

在查看高完整性c++编码标准时,我遇到了以下内容,

# 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。我已经在网站上要求澄清,但是,在等待的时候,不知道这里是否有人有任何线索。

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

…如果第一个枚举数没有初始化式,则对应常量的值为零。没有初始化式的枚举数定义将前一个枚举数的值加1后获得的值赋给该枚举数。

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