Ne pas empêcher la NRVO
La NRVO et la RVO sont des optimisations des compilateurs pour retourner un objet sans le copier. Je renvoie directement sur la FAQ C++ developpez.com.
Cependant, ces optimisations ne s’appliquent que sur une variable de type T
sans référence. Ce qui veut dire qu’une référence ne sera pas optimisée.
iterator operator+(const iterator& other, int n)
{
return iterator(other) += n; // pas de RVO
}
Alors qu’une décomposition de la fonction active la NRVO.
iterator operator+(const iterator& other, int n)
{
iterator ret(other);
ret += n;
return ret;
}
C’est une optimisation facile à faire et il est tout aussi facile de passer à côté ;).