La plupart de l'optimisation de retour valeur temps fera ces deux options assez similaires du point de vue de la performance (surtout si vous avez un opérateur mouvement affectation définie)
Il y a d'autres choses à considérer cependant.
Si votre type a un constructeur vide, ce faisant est problématique:
Point2D p(); // instead of Point p;
Ceci est connu comme le Most Vexing Parse. Il peut être évité en utilisant la deuxième forme:
Point2D p = Point2D();
Ou en utilisant la syntaxe d'initialisation uniforme introduite dans la dernière norme:
Point2D p{};
ne pas le deuxième appel le constructeur de copie? –
@Paul: Il peut, mais la plupart des compilateurs ne le seront pas avec les optimisations activées (voir aussi 'copy elision'). C'est fondamentalement une différence entre _direct-initialization_ et _copy-initialization_. – ildjarn
@ildjarn Le fait que les compilateurs 'fixent' le problème avec le code est en dehors du point. Sans optimisation, la deuxième version pourrait être deux fois plus lente que la première et certainement pas C++ ish. :) –