Siehe diese Standardreferenz (fett hervorgehoben):
C ++ 11 §4.12 Boolesche Konvertierungen
Ein Prvalue der arithmetischen, nicht gekürzten Aufzählung, Zeiger oder Zeiger auf member type kann in einen prvalue vom Typ bool konvertiert werden. Ein Nullwert, Nullzeigerwert oder Nullelementzeigerwert wird in konvertiert falsch; Jeder andere Wert wird in true konvertiert. Ein Prvalue vom Typ std :: nullptr_t kann in einen prvalue vom Typ bool konvertiert werden; das Der resultierende Wert ist false.
Der mittlere Satz ist relevant: Er sagt Ihnen, dass der Null-Zeigerwert ( foo = nullptr
) implizit in false
umgewandelt werden kann, der selbst den Typ bool
hat. Daher ist if (!foo)
wohldefiniert.
In C ++ ist der Nullzeiger als
definiertEine Null-Zeigerkonstante ist ein ganzzahliger konstanter Ausdruck (5.19) rvalue des Integer-Typs, der zu Null ausgewertet wird.
Darum,
%Vor%ist wie:
%Vor% Außerdem wird in C ++ Null (0) als boolean false
gezählt. Daher ist Ihre Anweisung if (foo == nullptr)
gültig und die gleiche wie if (!foo)
.
Tags und Links c++