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 NULLzero, 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.