lvalue reference

Prior to C++11, only one type of reference existed in C++, and so it was just called a “reference”. However, in C++11, it’s sometimes called an l-value reference. 
L-value references can only be initialized with modifiable l-values.
lvalue reference | modifiable l-values | non-modifiable l-values | R-values
--- | ---
can be initialized with | Yes | No | No
can modify | Yes | No | No

L-value references to const objects can be initialized with l-values and r-values alike. However, those values can’t be modified. Lvalue references to const objects are particularly useful because they allow us to pass any type of argument (l-value or r-value) into a function without making a copy of the argument.
lvalue reference to const | modifiable l-values | non-modifiable l-values | R-values
--- | ---
can be initialized with | Yes | Yes | Yes
can modify | No | No | No