Astrid Wang <wang_a(a)epita.fr> writes:
point2d::minus() const
{
- point2d p(row(), col());
+ point2d p(-row(), -col());
return p;
}
Ne vaut-il mieux pas écrire :
point2d::minus() const
{
return point2d(-row(), -col());
}
Car sinon il y a un risque que ceci se produise :
* Appel du constructeur d'un point2d pour p avec (-row(), -col()).
* Appel du constructeur par copie de point2d a l'emplacement de la
valeur de retour, en dehors de la fonction.
* Appel du destructeur de p.
La deuxième syntaxe, elle, autorise le compilateur à appler
directement le bon constructeur a l'emplacement de l'objet qui va
recevoir la valeur de retour.
cf. Thinking in C++, page 421, en bas. :)
gcc en -O3 optimise le premier code de sorte a ce qu'il n'y ai pas de
problèmes, mais icc ne le fait pas. Et en plus, je trouve que gcc
n'est pas très correct en se permettant de telles optimisations, qui
risque de changer le comportement attendu.
Pour conclure, c'est ce genre de problème qui fait que vaucanson est
beaucoup plus rapide quand on le compile avec gcc qu'avec icc.
--
Thomas Claveirole
thomas.claveirole(a)lrde.epita.fr