简体   繁体   中英

why must use const reference when reference to literals

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;

However, when I add const in front of them, it could work!!

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

I do not know why. Could anyone help me?

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

(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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM