Implizite Umsetzung von Null-Zeiger auf bool

8

Angenommen, ich habe Foo* foo = nullptr;

Wenn ich überprüfe, ob foo % nullptr ist oder nicht, darf ich

schreiben %Vor%

oder soll ich schreiben

%Vor%     
Bathsheba 02.11.2015, 09:31
quelle

3 Antworten

16

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.

    
Bathsheba 02.11.2015, 09:35
quelle
2

In C ++ ist der Nullzeiger als

definiert
  

Eine 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) .

    
rakeb.mazharul 02.11.2015 09:36
quelle
-1
%Vor%

Das funktioniert gut.

%Vor%

Dies würde für jemanden klarer aussehen, der Ihren Code liest.

    
dspfnder 02.11.2015 09:37
quelle

Tags und Links