Czy używasz NULL lub 0 (zero) dla wskaźników w C ++?

Na początku C ++, gdy był on przykręcony do C, nie można było używać NULL, ponieważ zostało zdefiniowane jako(void*)0. Nie można przypisać wartości NULL do żadnego wskaźnika innego niżvoid*, co czyniło go bezużytecznym. W tamtych czasach przyjęto, że użyłeś0 (zero) dla wskaźników zerowych.

Do dnia dzisiejszego nadal używałem zera jako wskaźnika zerowego, ale ci wokół mnie nalegają na użycieNULL. Osobiście nie widzę żadnych korzyści z nadania imienia (NULL) do istniejącej wartości - a ponieważ lubię testować wskaźniki jako wartości prawdy:

if (p && !q)
  do_something();

wtedy użycie zera ma więcej sensu (jak w przypadku użyciaNULL, nie możesz logicznie korzystaćp && !q - musisz wyraźnie porównać zNULL, chyba że założyszNULL wynosi zero, w takim przypadku po co używaćNULL).

Czy istnieje jakiś obiektywny powód, aby preferować zero nad 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 ich potrzebujesz.

questionAnswers(21)

yourAnswerToTheQuestion