为什么reinterpret_cast不能将int转换为int?

xml*_*lmx 34 c++ pointers integer type-conversion reinterpret-cast

我的编译器是最新的VC++ 2013 RC.

void f()
{
    int n1 = 0;
    int n2 = reinterpret_cast<int>(n1); // error C2440
}
Run Code Online (Sandbox Code Playgroud)

错误C2440:'reinterpret_cast':无法从'int'转换为'int'

为什么在这种明显的情况下不能使用reinterpret_cast?

Sho*_*hoe 29

根据 cppreference.com,以下转换仅在C++ 11之后可用:

可以将积分,枚举,指针或指向成员类型的表达式转换为其自己的类型.结果值与表达式的值相同.

可能并没有实现在Visual Studio 2013 RC呢.

  • 我觉得你是对的.`[C++ 03:5.2.10/1]`明确指出只有列出的转换才有效,而且这种自我转换不是其中之一.因此,这不是一个VS错误,而是一个尚未实现的C++ 11特性. (4认同)

Sin*_*all 24

C++标准说(5.2.10.2)(强调我的):

reinterpret_cast运算符不应丢弃constness(5.2.11).可以将积分,枚举,指针或指向成员类型的表达式显式转换为其自己的类型 ; 这样的转换产生其操作数的值.

所以我说这是一个错误.