为什么要使用这段代码来获取枚举成员的数量?
Why would this code be used to get how many enum members there are?
在查看高完整性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
初始化为Tim
。Team_Size == Team_Last+1 == Tim+1
,它是枚举数中元素的个数,不包括哨兵元素(因为枚举值从0
开始)。
相关文章:
- 枚举成员与静态 int 成员?
- 从类访问枚举成员
- 枚举成员不是类型错误
- std::映射键作为模板化结构与枚举成员
- 设置类的枚举成员无效地使用"枚举"
- 如何访问结构和枚举成员形成一类
- 是否可以在 constexpr 函数中遍历枚举成员,因此值为 constexpr
- 获取 [枚举成员?] 的封闭类型
- 如何使用 SWIG 枚举枚举成员
- 通过int值访问枚举成员
- '='应初始化所有枚举成员或仅初始化第一个枚举成员;
- 为什么可以获取此枚举成员值,而不必先深入研究嵌套枚举
- 将具有枚举成员的非托管结构封送到 C#
- 为类模板的枚举成员定义 std::hash
- 缩短C++枚举成员的路径(使用 typedef 或 typename),以用作模板参数
- C++类枚举成员变量
- 检查是否已定义枚举成员
- 为什么要使用这段代码来获取枚举成员的数量?
- 使用枚举成员模板化成员函数
- 使用咬运算符了解枚举成员的初始化