Alexandre Duret-Lutz <duret_g(a)lrde.epita.fr> writes:
[...]
Pour autant que je sache, la première aussi, car elle est
sujette à l'optimisation de la valeur de retour nommée (sur
le net: "Named return value optimization" ou encore "RVO").
C'est un sujet qu'on a discuté il y a quelques années au labo,
quelqu'un en a peut-être encore des traces quelque part.
En tout cas c'est la raison pour laquelle on préfère écrire
A operator+(const A& l, const A& r)
{
A a(l)
a += r;
return a;
}
plutôt que
A operator+(const A& l, const A& r)
{
return A(l) += r;
}
si le compilateur ne supporte pas nrvo, il est preferable de faire:
A operator+(A l, const A& r)
{
return l += r;
}
cf.
http://www.boost.org/libs/utility/operators.htm#symmetry
les gars de boost ont choisi de supporter les deux syntaxes.
d'apres leurs headers, cette optimisation est dispos seulement
sur gcc >= 3.1 et icc >= 6.
--
js(a)lrde.epita.fr | pouet(a)mouret.org
"creating the future" (c) framfab