Non const lvalue references

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


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.

Tags:

C++