Seite 1 von 1

Keyword "explicit" im Konstructor einer Klasse

Verfasst: 22. Januar 2014 13:32
von sigvdr

Code: Alles auswählen

class test {
    explicit test(QObject *parent = NULL);
   ......
};
Ausgangspunkt:
Das Keyword "explicit" verhindert implizite ( vom jeweiligen Compiler vorgenommene) Typumwandlung.
Das bringt im Beispiel oben nicht wirklich was, da es eine implizierte Typumwandlung bei QObject nicht gibt.
Ich halte aber grundsätzlich eine Fehlermeldung des Compilers bei unklaren Typen für sinnvoller als eine moglicherweise falsche Typkonvertierung, deshalb verwende ich
auch immer "explicit" im Konstruktor.

Gibt es Nachteile wenn "explicit" verwendet wird?

Gruß Sig

Re: Keyword "explicit" im Konstructor einer Klasse

Verfasst: 22. Januar 2014 16:48
von brax
Wenn Du mit Nachteile Effekte auf zur Laufzeit meinst, dann ist die Antwort nein. Explicit ist nur ein Hinweis für den Compiler. Der erzeugte Assembler sieht gleich aus.

Re: Keyword "explicit" im Konstructor einer Klasse

Verfasst: 23. Januar 2014 10:20
von RHBaum
Wenn die impliziete Typumwandlung nicht gewollt ist, hat das explicit sicher keine Nachteile ...
Ausser das es eben bissi "ungewohnt" aussieht ^^

Iss eher ne Philosophiefrage ....

"Normal" macht man das expliziet, wenn die Möglichleit besteht, das wer COde schreibt wo es zur "ungewollten" Typkonvertierung ueber den CTor kommen wuerde.
Meistens / oft weiss man es gar ned ... und oft kommt keiner auf die Idee code in die richtung zu schreiben ...

In deinem Beschriebenen Falle eher letzteres :-)

Keiner wuerde auf die idee kommen:
test ob = parent /// parent typ = QIrgendwas *
oder irgendwo wo test, test &, const test & verlangt wird, nen Qirgendwas * einzusetzen ...

Bei dir isses generierter Code ... ok
bei manuellen code wuerde man wohle eher auf das explizit verzichten, weil es eben nicht(s) (viel) bringt ... Die schreibarbeit nicht wert ist.
Ausserdem inkonsequent, weil wenn konsequent, muesst man das an viel viel mehr Stellen auch durchziehen ....

Ciao ...