We wczesnych dniach C ++, kiedy był przykręcony do C, nie można było używać NULL, tak jak zostało zdefiniowane jako (void*)0
. Nie można przypisać wartości NULL do żadnego wskaźnika innego niż void*
, co czyni go w pewnym sensie bezużytecznym. W tamtych czasach przyjęto, że użyłeś 0
(zero) wskaźników zerowych.
Do dzisiaj nadal używam zera jako wskaźnika zerowego, ale osoby wokół mnie nalegają na użycie NULL
. Osobiście nie widzę żadnej korzyści z nadania nazwy ( NULL
) istniejącej wartości - a ponieważ lubię także testować wskaźniki jako wartości prawdy:
if (p && !q)
do_something();
wtedy użycie zera ma większy sens (tak jakbyś używał NULL
, nie możesz logicznie używać p && !q
- musisz wyraźnie porównać NULL
, chyba że przyjmujesz, że NULL
zero, w takim przypadku dlaczego warto użyć NULL
).
Czy istnieje jakikolwiek obiektywny powód, aby preferować zero niż NULL (lub odwrotnie), czy też wszystkie są tylko osobistymi preferencjami?
Edycja: Powinienem dodać (i pierwotnie powiedzieć), że z RAII i wyjątkami rzadko używam wskaźników zero / NULL, ale czasami nadal ich potrzebujesz.