Oui. Mais tu as une excuse, l'article en lui-meme cause de la confusion. La (N)RVO n'a rien a faire ici.
Il faut regarder ce que tu compares. Oui, c'est moins couteux de passer par copie que de passer par reference pour
faire une copie ensuite dans les cas ou tu passes un temporaire car dans ce cas, le temporaire est utilise pour l'objet
local plutot que de le copier.
Ou intervient la (N)RVO, c'est lors de la generation du temporaire. La (N)RVO permet d'avoir un constructeur de copie
en moins.
Donc petit tableau du nombre d'appels au constructeur de copie pour (note la ligne 6 quand COPIE n'est pas defini)
Code :
- #ifdef COPIE
- void f(T o) {
- }
- #else
- void f(T const& p) {
- T o(p);
- }
- #endif
- T g() {
- return T(42);
- }
- ...
- f(g());
|
Ref Copie
Sans RVO 2 1
Avec RVO 1 0 |
---------------
The truth is rarely pure and never simple (Oscar Wilde)