简体   繁体   中英

Non const lvalue references

Why can you do this

int a;
const double &m = a;

But when you do this

int a;
double &m = a;

you get an error?

error: non-const lvalue reference to type 'double' cannot bind to a value of unrelated type 'int'

Edit:

To be more specific I am trying to understand the reason non-const references can't bind temp objects.

That is because a temporary can not bind to a non-const reference.

double &m = a;

a is of type int and is being converted to double . So a temporary is created. Same is the case for user-defined types as well.

Foo &obj = Foo(); // You will see the same error message.

But in Visual Studio, it works fine because of a compiler extension enabled by default. But GCC will complain.

Because making modification on a temporary is meaningless, c++ don't want you to bind non-const reference to a temporary. For example.

int a;
double &m = a;  // caution:this does not work.

What if it works? a is of type int and is being converted to double. So a temporary is created.

You can modify m , which is bound to a temporary, but almost nothing happens.After the modification, variable a does not change(what's worse, you might think a has changed, which may cause problems).

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