why must use const reference when reference to literals

前端 未结 2 1993
北海茫月
北海茫月 2021-01-21 01:54

I know only object could have reference. But literals are not object. So I could understand why following code cannot compile:

int &a = \'4\';
int &b = 2         


        
2条回答
  •  一个人的身影
    2021-01-21 01:59

    A integer or character literal is a prvalue [expr.prim.general]

    A literal is a primary expression. Its type depends on its form (2.13). A string literal is an lvalue; all other literals are prvalues.

    Since it is a prvalue we are allowed to take a const & to it but we cannot take a reference to it. If we take a const & to the temporary the the lifetime of the temporary will be extended to the point where the reference goes out of scope.

    {
        const int & a = 42;
        //line of code
        //42 still exits here
    } // a goes out of scope and now 42 is gone
    

提交回复
热议问题