C++11 将枚举转换为整数
C++11 Casting enums to ints
我有一个类型枚举
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 个字节就没关系了。
我有一个类型枚举
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 个字节就没关系了。