Keyword explizit

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
Volker75
Beiträge: 59
Registriert: 8. April 2009 21:04

Keyword explizit

Beitrag von Volker75 »

Hallo,

ich habe gerade mein Qt Programm mit cppcheck 1.69 getestet und erhalte nun Warnungen:
Zusammenfassung: Class 'view_a_Dialog' has a constructor with 1 argument that is not explicit.
Meldung: Class 'view_a_Dialog' has a constructor with 1 argument that is not explicit. Such constructors should in general be explicit for type safety reasons. Using the explicit keyword in the constructor means some mistakes when using the class can be avoided.
Es handelt sich um die Konstruktoren der Dialoge. In der .h Datei steht nur:

Code: Alles auswählen

class view_a_Dialog : public QDialog
{
	Q_OBJECT

public:
	view_a_Dialog(QWidget *parent);
protected:
	void closeEvent(QCloseEvent *event);
	[..]
private slots:
	void cellSelected(const QModelIndex& index);
Ich habe mich zwar versucht schlau zu machen und verstehe im Grunde zumindest teilweise warum es geht (explizit verhindert die Umwandlung von Typen. Ähnlich wie "const" die Umwandlung eines Wertes verhindert), bin mir aber noch unsicher in 2 Punkten:
1. Ich brauche also nur "explicit view_a_Dialog(QWidget *parent);" schreiben um "sicherer" zu sein? (Ja, ich habe gesehen, dass einige von Euch so ähnlichen Code hier geposted haben. Ich habe so etwas nur nie in den Qt-Büchern gesehen, die ich gelesen habe und wundere mich, warum es dort nie gemacht wurde. Gibt es evtl. einen gefährlichen Nachteil?)
2. Warum sollte man dann nicht analog vor "closeEvent" und "cellSelected" ebenfalls explizit schreiben?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Keyword explizit

Beitrag von Christian81 »

1. Ja
2. Weil es um das verhindern des impliziten Konvertierens der Klasse view_a_Dialog geht, nicht um einen Funktionsaufruf darin.

Vielleicht hilft das weiter:
http://en.cppreference.com/w/cpp/language/explicit
http://en.cppreference.com/w/cpp/langua ... ialization

Qt hat alle Konstruktoren mit einem Parameter explicit wenn ich mich nicht irre, zumindest ab Qt5
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Volker75
Beiträge: 59
Registriert: 8. April 2009 21:04

Re: Keyword explizit

Beitrag von Volker75 »

Danke.
Antworten