Da quando ho dubbi su questo problema (per C++ 03) Vi metto lo here.I appena letto su costruttori di conversione e si afferma checonfuso tra un costruttore di copia e un costruttore di conversione
"Per essere un costruttore di conversioni, il costruttore deve avere un singolo argomento ed essere dichiarato senza parole chiave esplicite. "
Ora la mia domanda è se il costruttore di copie può essere chiamato costruttore di conversioni a condizione che non sia dichiarato esplicitamente? Si qualifica per essere uno? Credo che non possa essere chiamato costruttore di conversioni perché accetta solo lo stesso parametro di tipo che non ha prodotto alcuna conversione. Per istanza
foo a;
foo b;
a = 100; //a Conversion constructor would be called (i.e) foo(int a){...}
a = b ; //Since both objects are same type and have been initialized the assignment operator will be called (if there is an overloaded version otherwise the default will be called)
La mia comprensione è corretta?
'operator =()' sarà preferibile se possibile, ma la vera domanda è "cosa succede quando non è possibile trovare un'implementazione idonea 'operator =()'? " – cdhowie
pippo a = 100; // è la costruzione della conversione foo b = a; // is copy construction –
[class.conv.ctor]/3 "Un costruttore di copia non esplicito (12.8) è un costruttore di conversione.Un costruttore di copie implicitamente dichiarato non è un costruttore esplicito, ma può essere chiamato per implicito digita le conversioni. " – dyp