Conversions utilisateur

Conversions utilisateur - C++ - Programmation

Marsh Posté le 11-12-2004 à 10:46:55    

Je definis 4 classes de la façon suivante :

Code :
  1. struct A { operator B(); };
  2. struct B { operator C(); };
  3. struct C { operator D(); };
  4. struct D{};


 
Mon compilateur rejette cette ecriture :

Code :
  1. A a
  2. D d( a );


 
J'en suis a ecrire...

Code :
  1. A a;
  2. D d = static_cast<C>(static_cast<B>(a));


Il me semblait que les conversions implicites utilisateur pouvait être chainées (max de 4) ?


Message édité par xterminhate le 11-12-2004 à 10:54:59

---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 11-12-2004 à 10:46:55   

Reply

Marsh Posté le 11-12-2004 à 11:18:50    

déjà ça manque de const.
 
du reste, le C et le C++ on toujours fonctionné comme ça : une seule conversion est implicite, sinon bonjour le bordel. C'est d'autant plus visible dans trucs simple comme entre Base** et Foo**.

Reply

Marsh Posté le 11-12-2004 à 11:38:53    

Ca manque de const uniquement dans la synthèse qui est sur le forum. Le code original est propre.
 
Si dans le sens A vers D, la conversion est problématique, elle l'est moins dans le ens inverse (D vers A) !
 

Code :
  1. struct D {};
  2. struct C { C(); C( const D& ); operator D() const; };
  3. struct B { B(); B( const C& ); operator C() const; };
  4. struct A { A(); A( const B& ); operator B() const; };


 
Le compilateur sait chainer deux conversions utilisateur :

Code :
  1. D d;
  2. B b( d );
  3. //B b = d ; ne passe pas !


 
Le compilateur ne sait pas chainer plus de deux conversions utilisateur :

Code :
  1. D d;
  2. A a( d );


 
Je peux admettre que multiplier les conversions implcites nuit à la lisibilité, mais j'ai du mal à comprendre pourquoi le comportement n'est pas symétrique.


---------------
Cordialement, Xterm-in'Hate...
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed