NullPtr->fkt() okay Standard?
-
Hallo,
hab heute wieder was dazu gelernt, was mich doch etwas erstaunt hat:
Klasse bla* = NULL; bla->mach_was_nicht_virtuelles_ohne_member();Jetzt mal unabhängig davon dass das unschön ist:
Kann ich mich darauf verlassen, dass mir jeder Kompiler ein Kompilat erstellt,
was diesen Funktionsaufruf ohne Exception frisst?Gruss,
Jockel
-
Ich würde mal sagen das Ergebniss ist reichlich undefiniert
-
Weil du das weisst, oder weil du das vermutest?
-
Weil dabei ein NULL-Ptr dereferenziert wird und das undefiniert ist? Oo
-
Sicher? Der Zeiger muss eigentlich nicht dereferenziert werden, this ist schließlich ebendieser Zeiger. Aber ich weiß grad' auch nicht, was der Standard dazu sagt.
/edit:
final draft 5.2.5, 3 schrieb:
If E1 has the type ``pointer to class X,'' then the expression E1->E2 is converted to the equivalent form (*(E1)).E2
Kenny hat doch Recht.
-
Ja, danke, das ist ein nachvollziehbares Argument.
-
Zur Sicherheit auch nochmal rum gegooglet.
Sind sich wohl alle einig, dass das undefiniertes Verhalten hervorruf.
Obgleich natürlich kein Kompiler diesen Code so übersetzen würde, dass da
irgendwas schief läuft.Danke an alle Beteiligten.
Jockel
-
Dein Compiler kann zur Compilezeit nicht wissen, worauf dein Pointer zur Laufzeit zeigt. In so einem einfachen Beispiel mag das noch theorhetisch gehen, aber in komplexeren Programmen auf keinen Fall mehr und daher wird er dir das anstandslos kompilieren.
-
Die MSDN verwendet diesen Hack sogar, die Funktion heisst CWnd::GetSafeHwnd - nur falls es jmd. interessiert.
p.S.: damit will ich nicht sagen dass es korrektes C++ wäre (das ist es nicht), bloss weil's hier irgendwie dazupasst.