c++ - 枚举从原始类型继承

标签 c++ c++11

来自 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 的事实是否会改变前两个问答中的答案?这是标准明确定义的行为吗?

最佳答案

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

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

#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)和非作用域枚举的基础类型。

关于c++ - 枚举从原始类型继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35294575/

相关文章:

c++ - LibQREncode qrcode 到 BMP

c++ - boost::geometry::model::linestring 与 boost::geometry::model::polygon 的交集

c++ - 为什么序列运算算法的谓词是通过拷贝传递的?

c++ - 整数除法,还是 float 乘法?

c++ - 我如何使用带有 2 个以上参数的比较函数和 C++ 优先级队列?

c++ - 数据包在 .pcap 文件中存储错误

C++ VS fatal error C1083 权限被拒绝

c++ - 如何在不创建空类的情况下避免专门化 "big"模板类?

c++ - 如何在 C++ 中编写指令缓存友好的程序?

c++ - 为什么删除移动构造函数会导致 vector 停止工作