why must use const reference when reference to literals

前端 未结 2 1986
北海茫月
北海茫月 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
    
    0 讨论(0)
  • 2021-01-21 02:01

    (Assiming that you left out '&' in the second snippet.)

    Because the literal is not an object; a temporary object is created which has the value corresponding to the literal.

    You can bind a temporary to a const reference, and thereby extend that object's lifetime, but you can't bind it to a non-const reference.

    0 讨论(0)
提交回复
热议问题