Keyword "explicit" im Konstructor einer Klasse

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
sigvdr
Beiträge: 100
Registriert: 1. Juli 2008 19:29

Keyword "explicit" im Konstructor einer Klasse

Beitrag 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
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Re: Keyword "explicit" im Konstructor einer Klasse

Beitrag 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.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Keyword "explicit" im Konstructor einer Klasse

Beitrag 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 ...
Antworten