根据[expr.cast] / 4,C风格的演员按顺序尝试以下演员表:
const_cast
static_cast
static_cast
后跟const_cast
reinterpret_cast
reinterpret_cast
后跟const_cast
以下演员阵容精良:
const_cast<int&>(static_cast<const int&>(0))
然而,GCC和Clang reject都是演员(int&)0
。为什么呢?
答案 0 :(得分:1)
抛出强制转换(int&amp;)0的原因是因为你试图将一个文字作为参考投射,这实际上没有意义。 &amp; operator需要一个可引用的值,而不能引用文字。编译器看到您将文字转换为右值因此main.cpp:2:11: error: invalid cast of an rvalue expression of type 'int' to type 'int&'
这个问题并没有真正归结为演员表的层次结构,而是无法将文字作为参考。
编辑:快速说明,我对你的措辞感到有点困惑,是的
编译器接受const_cast<int&>(static_cast<const int&>(0));
?它不应该由于将左值作为右值。如果是这样的话,我一定是误解了这个问题,我会回答我的答案。