枚举继承自原始类型

时间:2016-02-09 14:29:41

标签: c++ c++11

thisthis这样的问题来看,我认为继承原始类型会导致编译错误。但是,以下代码在Ideone上编译并生成预期输出。

#include <iostream>

enum class Test : unsigned short int
{
    TEST, TEST2, TEST3, TEST4
};

int main() {
    // your code goes here
    Test ans = Test::TEST3;

    if(ans == Test::TEST3)
    {
        std::cout << "Here" << std::endl;
    }

    return 0;
}

class也是enum的事实是否改变了前两个Q&amp; A中的答案?这是标准定义明确的行为吗?

3 个答案:

答案 0 :(得分:25)

这并不意味着继承,而是选择枚举的基础类型。底层类型是整数类型,用于表示枚举值。

您可以在此示例中看到不同之处:

#include <iostream>

enum class tiny : bool {
    one, two   
};

enum class bigger : long {
    some, lots   
};

int main(int argc, char *argv[])
{
    std::cout << sizeof(tiny::one) << '\n';    //prints 1
    std::cout << sizeof(bigger::some) << '\n'; //prints 8
}

在C ++ 11中,您可以指定作用域(即class)和未作用域枚举的基础类型。

答案 1 :(得分:6)

在C ++ 11中添加了

enum class,以允许您指定枚举的基础类型。它重用继承语法作为类比,但它不是继承。

答案 2 :(得分:4)

它不是继承,它是指定基础类型的方式。