+ 1
Why const int& allows r value reference
Hi We all know that int&& i = 12; is valid for c++11 as it is r value reference. And int& i = 12; is not valid as 12 is not lvalue. However, why const makes it valid i.e. const int& i = 12; is why valid statement?
4 Answers
+ 2
That's because how "const" works according to standards.
When doing
const int& i = 12;
The value 12 is not directly bound to variable "i", instead 12 is first bound to a temporary int variable ( which was created behind the scenes ) with an lvalue. This is the variable to which your const variable binds to.
If you want to see how exactly is this happening, then you can see the following program which generates a C like GIMPLE representation( Intermediate representation to which gcc's front end compiles your code to ) of your code.
https://code.sololearn.com/cVlF0YdTz3L4/?ref=app
+ 1
Hey Ketan Lalcheta
1.A reference may be bound only to an
object, not to literal or to result of expression .
2.A non-const reference can be used to change the value of the variable it is referring to. Hence, C++ does not permit a non-const reference to a const variable.
EX:
int &var=4; we can change value of reference , but logically it is not possible to change 4 to any value.hence it is illegal !
const int &var =4 ; here 4 is used constant and also we are not changing the value so it is legal write constant !
HOPE THIS WILL HELP YOU !
+ 1
Thanks Arsenic and Thirt13n ... It's useful information...
However, I tried to get code by Arsenic but could not get it more. I got point that const is bound to some temporary variable ... Is it correct ?
Refer below code but it does not call copy constructor :
https://code.sololearn.com/c0xmFKfRS76I/?ref=app
+ 1
Ketan Lalcheta
When doing
const test& t = test();
It gets converted into something like this :-
test _1 = test()
test const& t = _1;
You can see that the second line is creating const "reference" to another variable with lvalue and not creating a copy of it thus copy constructor is not being called.