Could someone please explain how to simulate this error? and also what this complains about.
See Question&Answers more detail:os"A non-const reference may only be bound to an lvalue" in C++
Could someone please explain how to simulate this error? and also what this complains about.
See Question&Answers more detail:os"A non-const reference may only be bound to an lvalue" in C++
An lvalue is, roughly, whatever may be on the left side of an assignment statement. References provide aliases for other objects:
std::string s;
std::string & rs = s; // a non-const reference to s
std::string const & crs = s; // a const reference to s
Given the above definitions, referring to rs
or crs
is the same as referring to s
, except that you cannot modify the referred string through crs
, as it is const. A variable is an lvalue, so you are allowed to bind a non const reference to it. In contrast you can bind const references to temporary values as in:
std::string const & crs1 = std::string();
However the following is illegal:
std::string & rs1 = std::string();
This is because using non-const references you imply that you want to modify the referenced object. However temporaries bound to references are destroyed when the reference go out of scope. As it is not always intuitive when C++ creates temporary objects, binding them to non-const references has been disallowed, to avoid you the unpleasant surprise of changing your object as you like, just to see it destroyed a few statements later.