Fro*_*art 11 c++ enums static-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);
}
Run Code Online (Sandbox Code Playgroud)
Tra*_*kel 21
我认为这
reinterpret_cast可以用于所有类型的强制转换,因为它强制任何类型强制转换为具有此转换的所有副作用的其他类型.
这是一种常见的误解.可以执行的转换reinterpret_cast在标准的5.2.10中明确列出.int-TO- enum和enum至- int转换不在列表:
nullptr_t 到整数enum指针nullptr_t 到其他指针类型T1到一个不同的指针到构件的T2在情况下都T1和T2是对象或功能reinterpret_cast通常用来告诉编译器:嘿,我知道你认为这个内存区域是一个T,但我希望你把它解释为U(在哪里T和U不相关的类型).
值得注意的是,这reinterpret_cast可能对比特产生影响:
5.2.10.3
[注意:reinterpret_cast执行的映射可能会或可能不会产生与原始值不同的表示. - 结束说明]
C风格的演员总是有效,因为它包含static_cast在它的尝试中.