Non Const Lvalue References

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.

2

2 Answers

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.

3

Because making modification on a temporary is meaningless, C++ doesn'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).

5

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Alexander Ross
Author

Alexander Ross

Alexander Ross has covered the video game industry for a decade, writing deep dives on game design, esports tournaments, VR developments, and gaming culture.