Chapter 7

By Value or by Reference?

Since the beginning, C++ has provided call-by-value and call-by-reference, and it is not always easy to decide which one to choose: Usually calling by reference is cheaper for nontrivial objects but more complicated. C++11 added move semantics to the mix, which means that we now have different ways to pass by reference:1

1. X const& (constant lvalue reference):

The parameter refers to the passed object, without the ability to modify it.

2. X& (nonconstant lvalue reference):

The parameter refers to the passed object, with the ability to modify it.

3. X&& (rvalue reference):

The parameter refers to the passed object, with move semantics, meaning that you can modify or “steal” the value.

Deciding how to declare ...

Get C++ Templates: The Complete Guide, 2nd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.