Discussion: X x = X(...);
Afficher un message
Vieux 26/03/2008, 23h08   #2
Pascal Bourguignon
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: X x = X(...);

Alain Ketterlin <alain@dpt-info.u-strasbg.fr> writes:

> Salut,
>
> J'ai trouve récemment du code qui initialise les objets de la façon
> suivante :
>
> X x = X(...);
>
> Je me suis dit, facile, c'est une initialisation de x par un
> temporaire, avec appel du copy-ctor. Eh bien non. Y a pas de
> copy-ctor. Si j'en définis un, il n'est pas appelé. Si je le définis
> avec X(X &) (c'est-à-dire pas de const), j'ai une erreur de compil (ce
> que je conçois avec un temporaire).


PCQJES, c'est équivalent à : X x(...);

> Bref : est-une syntaxe reconnue ?


Oui.

> recommandée ?


Je l'aime bien. Je la recommenderais.


> ou seulement une
> fantaisie de g++ (4.1.3, au fait, avec -W -Wall) ?


Non, SJMSB, c'est bien dans la syntaxe du standard.


> Y en a-t-il
> d'autres comme ça ?


Tu parie! Il n'y a pas plus immonde que la syntaxe de C++, on y
trouve toutes les horreurs imaginables.


> Quel est l'intérêt (à part pouvoir mettre des
> parenthèses) ?


Je suppose que l'intérêt c'est de pouvoir appeler le constructeur
d'une sous-classe et de faire une projection immédiate.

-*- mode: compilation; default-directory: "~/src/miscellaneous/tests-c++/" -*-
Comint started at Wed Mar 26 22:58:15

cat test-constructor-projection.c++ \
&& g++ -o test-constructor-projection test-constructor-projection.c++ \
&& echo -------------------- \
&& ./test-constructor-projection

#include <iostream>
using namespace std;

class X {
public:
int x;
X(int anX):x(anX){
cout<<"X("<<anX<<");"<<endl;
}
};


class Y:public X {
public:
int y;
Y(int anX,int anY):X(anX),y(anY){
cout<<"Y("<<anX<<","<<anY<<");"<<endl;
}
};

int main(void){
X x=Y(1,2);
return(0);
}

--------------------
X(1);
Y(1,2);

Comint finished at Wed Mar 26 22:58:17


Mais dans ce cas, un Y temporaire est effectivement créé avant d'être
projeté sur x.

--
__Pascal Bourguignon__ http://www.informatimago.com/

COMPONENT EQUIVALENCY NOTICE: The subatomic particles (electrons,
protons, etc.) comprising this product are exactly the same in every
measurable respect as those used in the products of other
manufacturers, and no claim to the contrary may legitimately be
expressed or implied.
  Réponse avec citation
 
Page generated in 0,05456 seconds with 9 queries