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.