317 votes

Pourquoi aurais-je utiliser push_back au lieu de emplace_back?

C++11 vecteurs ont la nouvelle fonction emplace_back. Contrairement aux push_back, qui s'appuie sur les optimisations du compilateur pour éviter les copies, emplace_back utilise le transfert parfait pour envoyer les arguments directement au constructeur pour créer un objet en place. Il me semble qu' emplace_back fait tout push_back pouvez le faire, mais de temps en temps il va faire mieux (mais jamais pour le pire).

Quelle raison dois-je utiliser push_back?

131voto

Luc Danton Points 21421

push_back permet toujours l'utilisation de l'initialisation uniforme, dont je suis très friand. Par exemple:

struct aggregate {
    int foo;
    int bar;
};

std::vector<aggregate> v;
v.push_back({ 42, 121 });

D'autre part, v.emplace_back({ 42, 121 }); ne fonctionnera pas.

83voto

Mehrdad Points 70493

Rétro-compatibilité avec les pré-C++11 compilateurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X