Unterschiedliche If Schreibweise
-
Hi, zufällig ist mir aufgefallen, dass man auch folgendes unter C++ schreiben kann:
if(XmlNode* parent = node->Parent()) { }Was mir bislang nicht bewusst war. Ist dies nur eine andere Schreibweise für
XmlNode* parent = node->Parent(); if(parent) { }oder kann es sein, dass im ersteren Fall der temporäre Zeiger auf den Parent XmlNode nur angelegt wird wenn das Parent Objekt existiert? Das würde wenn node->Parent() nullptr zurückliefert immerhin eine unnötige Zeigererstellung einsparen?
-
die beeiden sind äquivalent. operator= gibt am Ende eine Referenz auf parent zurück, di dann im if ausgewertet wird.
-
Wenn du dabei an Performance denkst, vergiss es: das ist Premature Optimization und total unnötig. Eine Erstellung einer (Zeiger-) Variablen kostet doch gar nix.
Wäre das jetzt ein großes Objekt, ok, dann würde es sich lohnen.
Nimm die Schreibweise, die für dich lesbarer ist. Ich find die 2. Variante besser.
-
Das macht von der Performance keinen Unterschied, weil der Code identisch ist. Das ist einfach nur Syntax Sugar.
-
das ist Premature Optimization
Nein, das ist überhaupt keine Optimization, denn es ist beides dasselbe. Lediglich der Scope der Variablen ist anders.
-
Sie sind nicht äquivalent. Der Unterschied liegt darin, dass im ersten Fall der Scope des Zeigers auf die if-Anweisung beschränkt ist.
BTW, ob eine Zeigervariable "erstellt" wird, gehört nicht zum beobachtbaren Verhalten des Programms.
-
Finde #1 besser, da ist der Scope kleiner. Wer sowas nicht lesen kann, sollte sich eine andere Sprache suchen.
-
Bashar schrieb:
Der Unterschied liegt darin, dass im ersten Fall der Scope des Zeigers auf die if-Anweisung beschränkt ist.
...und dessen zugehörigen
else ifundelse-Statements.
-
Die if-Anweisung umfasst auch den else-Zweig.