C++11 将枚举转换为整数

C++11 Casting enums to ints

本文关键字:整数 转换 枚举 C++11      更新时间:2023-10-16

>我有一个类型化的枚举

enum side : int {_white=0,
                 _yellow=1,
                 _green=2,
                 _blue=3,
                 _red=4,
                 _orange=5};

但是,使用 gcc-5,编译器表示在以下情况下无法使用static_cast:

side value
function(static_cast<int *>(&value))

为什么?执行static_cast<int>(value))不会引发任何错误。

指针类型转换不同于类型转换。通过指针访问会使字节保持不变,但读取它们的方式不同。这对于枚举来说是不安全的,因为它可以是不同大小的 int。

不过,类型转换是安全的,因为它将枚举转换为 int 作为副本。原始枚举可以是单个字节或两个字节,但一旦复制到 4 或 8 个字节,就没关系了。