从this和this这样的问题来看,我认为继承原始类型会导致编译错误。但是,以下代码在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中的答案?这是标准定义明确的行为吗?
答案 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)
enum class
,以允许您指定枚举的基础类型。它重用继承语法作为类比,但它不是继承。
答案 2 :(得分:4)
它不是继承,它是指定基础类型的方式。