LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 240|回复: 0

枚举器范围

[复制链接]
发表于 2024-1-31 22:44:28 | 显示全部楼层 |阅读模式
枚举提供上下文来描述以命名常量表示的一系列值。 这些命名常量也称为“枚举器”。 在原始 C 和 C++ enum 类型中,非限定枚举器在声明 enum 的整个范围中可见。 在区分范围的枚举中,枚举器名称必须由 enum 类型名称限定。 以下示例演示两种枚举之间的基本差异:

namespace CardGame_Scoped
{
    enum class Suit { Diamonds, Hearts, Clubs, Spades };

    void PlayCard(Suit suit)
    {
        if (suit == Suit::Clubs) // Enumerator must be qualified by enum type
        { /*...*/}
    }
}

namespace CardGame_NonScoped
{
    enum Suit { Diamonds, Hearts, Clubs, Spades };

    void PlayCard(Suit suit)
    {
        if (suit == Clubs) // Enumerator is visible without qualification
        { /*...*/
        }
    }
}
将为枚举中的每个名称分配一个整数值,该值与其在枚举中的顺序相对应。 默认情况下,为第一个值分配 0,为下一个值分配 1,以此类推,但你可以显式设置枚举器的值,如下所示:

enum Suit { Diamonds = 1, Hearts, Clubs, Spades };
为枚举器 Diamonds 分配值 1。 后续枚举器接收的值会在前一个枚举器的值的基础上加一(如果没有显式赋值)。 在前面的示例中,Hearts 将具有值 2,Clubs 将具有值 3,依此类推。

每个枚举器将被视为常量,并且必须在定义 enum 的范围内(对于未区分围的枚举)或在 enum 本身中(对于区分范围的枚举)具有唯一名称。 为这些名称指定的值不必是唯一的。 例如,考虑未区分范围的枚举 Suit 的以下声明:

enum Suit { Diamonds = 5, Hearts, Clubs = 4, Spades };
Diamonds、Hearts、Clubs 和 Spades 的值分别是 5、6、4 和 5。 请注意,5 使用了多次;尽管这并不符合预期,但是允许的。 对于区分范围的枚举来说,这些规则是相同的。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表