为什么(int&)0格式不正确?

时间:2018-03-30 21:47:56

标签: c++ casting language-lawyer static-cast const-cast

根据[expr.cast] / 4,C风格的演员按顺序尝试以下演员表:

  1. const_cast
  2. static_cast
  3. static_cast后跟const_cast
  4. reinterpret_cast
  5. reinterpret_cast后跟const_cast
  6. 以下演员阵容精良:

    const_cast<int&>(static_cast<const int&>(0))
    

    然而,GCC和Clang reject都是演员(int&)0。为什么呢?

1 个答案:

答案 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));?它不应该由于将左值作为右值。如果是这样的话,我一定是误解了这个问题,我会回答我的答案。