Zuweisung vs Initialisierung in C ++

7

Ich dachte, dass Konstruktoren die Kontrolle der Initialisierung und operator = Funktionen in C ++ steuern. Warum funktioniert dieser Code?

%Vor%

In der dritten Zeile der Hauptfunktion weise ich ein int einem Objekt der Klasse Deg zu. Da ich keine Funktion operator=(int) habe, dachte ich, dass dies sicherlich fehlschlagen würde ... aber stattdessen ruft sie den Konstruktor Deg(int a) auf. Beherrschen Konstruktoren auch die Zuweisung?

    
Vlad the Impala 20.02.2010, 18:02
quelle

2 Antworten

18

Dies wird als implizite Typumwandlung bezeichnet. Der Compiler sucht nach einem Konstruktor, der direkt von dem Typ, den Sie zuweisen, zu dem Typ wechselt, den Sie zuweisen möchten, und ruft ihn auf. Sie können verhindern, dass dies geschieht, indem Sie das Schlüsselwort explicit vor dem Konstruktor hinzufügen, das Sie nicht implizit aufrufen möchten, wie folgt:

explicit Deg(int a) : d(a) {}

    
JonM 20.02.2010, 18:07
quelle
4

Um JonMs Antwort zu klären:

Für die Zeile d = 3 ist ein Zuweisungsoperator beteiligt. 3 wird implizit in ein Deg konvertiert, wie JonM sagte, und dann wird Deg mit Hilfe des vom Compiler generierten Zuweisungsoperators (der standardmäßig ein Mitglied verwendet) an d zugewiesen -Wise-Zuordnung). Wenn Sie die Zuweisung verhindern möchten, müssen Sie einen privaten Zuweisungsoperator deklarieren (und ihn nicht implementieren):

%Vor%     
user123456 20.02.2010 18:39
quelle