c – reinterpret_cast错误为枚举

前端之家收集整理的这篇文章主要介绍了c – reinterpret_cast错误为枚举前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么我不能使用reinterpret_cast操作符进行这样的转换?
enum Foo { bar,baz };

void foo(Foo)
{
}

int main()
{
   // foo(0); // error: invalid conversion from 'int' to 'Foo'
   // foo(reinterpret_cast<Foo>(0)); // error: invalid cast from type 'int' to type 'Foo'
   foo(static_cast<Foo>(0)); 
   foo((Foo)0);
}

解决方法

I think that reinterpret_cast can be use for all types of casts,because it’s force any type casts to another type with all side-effects of this conversion.

这是一个常见的误解.可以使用reinterpret_cast执行的转换在标准的5.2.10中明确列出. int-to-enum和enum-to-int转换不在列表中:

>整数类型的指针,只要整数大到足以容纳它
> nullptr_t为整数
>整数类型或枚举到指针
>函数指向不同类型的另一个函数指针
>指向不同类型的另一个对象指针的对象指针
> nullptr_t到其他指针类型
> T1和T2都是对象或函数的情况下,T1的指向成员到T2的不同对象

reinterpret_cast通常用于告诉编译器:嘿,我知道你认为这个内存区域是T,但我想让你把它解释为一个U(其中T和U是不相关的类型).

还值得注意的是,reinterpret_cast可以对位有影响:

5.2.10.3

[ Note: The mapping performed by reinterpret_cast might,or might not,produce a representation dif-
ferent from the original value. — end note ]

C风格的演员总是奏效,因为它包含了static_cast的尝试.

猜你在找的C&C++相关文章