Hat das Erstellen eines Konstruktors mit mehreren Argumenten explicit
einen (nützlichen) Effekt?
Beispiel:
class A {
public:
explicit A( int b, int c ); // does explicit have any (useful) effect?
};
c++
explicit-constructor
Peter G.
quelle
quelle
explicit
. Ich persönlich würde mir nicht die Mühe machen, Konstruktoren mit mehreren Argumenten herzustellenexplicit
.Sie würden bei der Klammerinitialisierung darauf stoßen (zum Beispiel in Arrays).
quelle
Die hervorragenden Antworten von @StoryTeller und @Sneftel sind der Hauptgrund. IMHO, dies ist jedoch sinnvoll (zumindest mache ich das), um spätere Änderungen am Code zu überprüfen. Betrachten Sie Ihr Beispiel:
Dieser Code profitiert nicht direkt davon
explicit
.Einige Zeit später beschließen Sie, einen Standardwert für hinzuzufügen
c
, sodass dieser wie folgt lautet:Dabei konzentrieren Sie sich auf den
c
Parameter - im Nachhinein sollte er einen Standardwert haben. Sie konzentrierenA
sich nicht unbedingt darauf, ob selbst implizit konstruiert werden soll. Leider macht diese Änderung wiederexplicit
relevant.Um zu vermitteln, dass es sich um einen Ctor handelt
explicit
, kann es sich lohnen, dies beim ersten Schreiben der Methode zu tun.quelle
explicit
dass das schon immer da war, und der technische Support wird mit Anrufen über diese Änderung überschwemmt sein und Stunden damit verbringen, zu erklären, dass diesexplicit
nur Lärm war und dass das Entfernen harmlos ist. Persönlich bin ich nicht sehr gut darin, die Zukunft vorherzusagen; Es ist schwer genug zu entscheiden, wie eine Benutzeroberfläche jetzt aussehen soll .Hier sind meine fünf Cent für diese Diskussion:
Wie Sie leicht sehen können, wird
explicit
verhindert , dass die Initialisierungsliste zusammen mit derbar
Funktion verwendet wird, da der Konstruktor vonstruct Bar
als deklariert istexplicit
.quelle