35

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

void f()
{
    int n1 = 0;
    int n2 = reinterpret_cast<int>(n1); // error C2440
}

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

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

4

2 回答 2

29

根据cppreference.com,以下转换仅从 C++11 开始可用:

整数、枚举、指针或指向成员的指针类型的表达式可以转换为它自己的类型。结果值与表达式的值相同。

可能尚未在 Visual Studio 2013 RC 中实现。

于 2013-09-18T10:59:20.840 回答
24

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

reinterpret_cast 运算符不应抛弃 constness (5.2.11)。整数、枚举、指针或指向成员类型的表达式可以显式转换为它自己的类型;这样的强制转换会产生其操作数的值。

所以我会说这是一个错误。

于 2013-09-18T08:44:33.140 回答