reinterpret_cast 为相同类型

kra*_*ik3 6 c++ standards reinterpret-cast c++14

考虑以下程序:

struct A{};

int main()
{
    A a;
    A b = a;
    A c = reinterpret_cast<A>(a);
}
Run Code Online (Sandbox Code Playgroud)

编译器(g++14)抛出一个关于invalid cast from type 'A' to type 'A'. 为什么强制转换为相同类型无效?

for*_*818 4

这是不允许的,因为标准是这么说的。

您可以使用的允许转换集相当有限reinterpret_cast。参见例如cppreference。例如,列出的第一点是:

1) 整型、枚举型、指针型或成员指针型的表达式可以转换为它自己的类型。结果值与表达式的值相同。(自 C++11 起)

但是,将自定义类型(无指针!)强制转换为自身并不在列表中。无论如何你为什么要这么做?