Ne pas empêcher la NRVO

Article suivant: Placement new, allocateur et conteneur
Article précédent: Sqlite, reconstruire la bdd pour l'alléger

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é ;).

Commentaires

Aucun commentaire pour le moment :'(

Le système de commentaire passe par les issues de github et aucun n'est associée au billet. Vous pouvez faire votre commentaire dans une issue qui a comme titre celui du billet. Je me chargerai de les associer.

Revenir en haut