我有一个输入的枚举
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))
不会引发任何错误。
答案 0 :(得分:5)
指针类型转换不仅仅是类型转换。通过指针访问会使字节相同但以不同方式读取它们。这对于枚举来说不是安全的,因为它可以是不同大小的int。
类型转换是安全的,因为它将枚举转换为int作为副本。原始枚举可以是单个字节或两个字节,但一旦复制到4或8个字节就无关紧要。