Discussion: X x = X(...);
Afficher un message
Vieux 27/03/2008, 09h35   #4
James Kanze
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: X x = X(...);

On Mar 26, 11:56 pm, Fabien LE LEZ <grams...@gramster.com> wrote:
> On Wed, 26 Mar 2008 22:31:43 +0100, Alain Ketterlin :


> > X x = X(...);


> >Je me suis dit, facile, c'est une initialisation de x par un
> >temporaire, avec appel du copy-ctor.


> Si je me souviens bien, c'est bien ça, à ceci près que le
> compilo a le droit d'optimiser le code en supprimant le
> temporaire et l'appel au constructeur de copie.


C'est à peu près ça. Plus généralement, il y a pas mal de
contextes où le compilateur a le droit de supprimer une copie.
La théorie, c'est qu'une copie, c'est une copie, et que si
l'objet supporte la copie, combien on en fait n'a pas
d'importance. C'est donc une bonne règel de ne pas compter sur
des effets de bord dans les constructeurs de copie.

> Donc, si je ne me trompe pas, le non-appel du constructeur est
> bien une décision de g++, décision autorisée par la norme.


C'est une décision qu'a pris la quasi-totalité des compilateurs,
je crois. Je n'en connais pas qui feront réelement la copie dans
ce cas-ci.

Note bien que la compilateur est censé de vérifier qu'il aurait
pÛ faire la copie, même s'il ne le fait pas. Ce qui même à la
situation que si tu ne fournis pas de constructeur de copie
utilisable, il y aurait une erreur à la compilation, mais si tu
le fournis, il ne serait pas appelé.

> >Bref : est-une syntaxe reconnue ? recommandée ?


> C'est tout à fait autorisé, mais je préfère franchement écrire
> X x (...);


Avec la risque qu'elle soit comprise comme une déclaration de
fonction. (Mais je suis d'accord avec toi -- c'est l'écriture
que j'utilise systèmatiquement pour les types de classe.)

--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
  Réponse avec citation
 
Page generated in 0,04960 seconds with 9 queries