2017-05-10 7 views
2

Angenommen, ich habe einen Zeiger: int *pointer.Überprüfen Sie die Nullbarkeit des Zeigers:! Zeiger oder Zeiger == nullptr?

Wenn ich seine NULL-Zulässigkeit testen will, sollte ich es mit:

bool nullability = !pointer; 

Oder mit:

bool nullability = (pointer == nullptr); 

Sind beide Ausdrücke äquivalent? Wenn nicht, warum und was sind die Nebenwirkungen?

+1

Sehen Sie hier für einige Ideen http://stackoverflow.com/a/17774781/133203 –

Antwort

4

Beide sind äquivalent, da nullptr garantiert in false umgewandelt wird, wenn sie in einen booleschen Wert konvertiert wird.

Von N4296:

4,12 Boolesche Konvertierungen
A prvalue der Arithmetik, unscoped Enumeration, Zeiger oder Pointer auf Elementtyp mit einer prvalue vom Typ bool umgewandelt werden kann. Ein Nullwert, Nullzeigerwert, oder Nullelementzeigerwert wird in false konvertiert; Jeder andere Wert ist konvertiert in true. Bei der direkten Initialisierung (8.5) kann ein Pr-Wert vom Typ std :: nullptr_t in einen Pr-Wert vom Typ bool konvertiert werden; Der resultierende Wert ist false.