c++ - operator<< 打印一个底层类型为 short 的枚举值是不明确的

标签 c++ enums

<分区>

很简单。为什么会这样?它适用于所有其他整数类型。

enum : unsigned short {
    ushort_min = static_cast<unsigned short>(0u),
    ushort_max = static_cast<unsigned short>(~0u)
};

enum : short {
    short_min = short(ushort_max << (sizeof(short) * char_bit - 1)),
    short_max = short(ushort_max >> 1)
};

std::cout << short_min; // BOOM

最佳答案

示例代码使用 gcc 编译没有错误。这里的答案可能是“升级你的编译器”:

$ cat t.C
#include <iostream>

enum : unsigned short {
    ushort_min = static_cast<unsigned short>(0u),
    ushort_max = static_cast<unsigned short>(~0u)
};

enum : short {
    short_min = short(ushort_max << (sizeof(short) * 8 - 1)),
    short_max = short(ushort_max >> 1)
};

int main()
{
    std::cout << short_min; // BOOM
}
$ g++ -std=c++14 -c -o t.o t.C
$ g++ --version
g++ (GCC) 5.3.1 20151207 (Red Hat 5.3.1-2)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

关于c++ - operator<< 打印一个底层类型为 short 的枚举值是不明确的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35025690/

相关文章:

c++ - 在 C++ 中全局定义结构

java - 枚举中的内部类在 Java 中总是静态的吗?

enums - 一种在 C++0x 枚举类中使用所有非限定名称的方法?

c# - 如何检查 Enum 中是否存在来自 URL 的字符串值并将其在结果中的值分配给变量?

c++ - 寻找总和最大的子矩阵

C++ std::shared_ptr 会初始化类中的其他成员数据

c++ - 具有使用共享 MFC dll 的 API 的 WinRT 应用程序

c++ - 为什么我的快速排序如此低效?

C++ 对于哪些类型,参数类型名称可以与带类型说明符的参数名称相同?

c# - 如何在 Visual Studio 2022 for net6.0 的 C# 中将枚举添加到新控制台模板?