Déplacer le nom ou la Valeur de Retour d'Optimisation (NRVO)?

Permet de dire que nous avons le code suivant:

std::vector<int> f()
{
  std::vector<int> y;
  ...
  return y;
} 

std::vector<int> x = ...
x = f();

Il semble que le compilateur a deux approches:

(a) NRVO: la Destruction des x, puis de construire f() à la place de x.

(b) se Déplacer: la Construction f() dans la temp de l'espace, déplacez f() dans x, détruire f().

Est le compilateur libre d'utiliser l'une ou l'autre approche, conformément à la norme?

  • (a) n'est pas autorisé. Hormis le fait que l'opérateur d'affectation doit être appelé, il aurait le mauvais comportement lors d'une partie de la ... dans f déclenche une exception. x ne doit pas être modifié dans ce cas, donc si ça a déjà été détruite, c'est un problème.
  • C'est un problème avec vague des questions. J'ai pensé qu'il ne voulait pas dire ce qu'il a littéralement écrit. Apparemment certaines personnes à d'autres pensaient de même.
InformationsquelleAutor Clinton | 2011-06-04