It is even more fundamental than that, the compiler can't do the optimization without it. To efficiently set the value you need to call ```operator=(T&&)``` but you can't do that with a ```const T&```. You could do it with a ```T&``` but then you couldn't call the function via
```C++
   aPFCluster.setRecHitFractions(std::vector<...>());
```
i.e. pass it a temporary. A temporary is automatically a ```T&&``` but you can't convert a ```T&&``` to a ```T&```.

Therefore, in C++11 it is always best to use arguments by value when the argument is used to set a member data.