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