All'inizio di C ++ quando era imbullonato sopra C, non era possibile usare NULL come definito (void*)0
. Non è possibile assegnare NULL a nessun puntatore diverso da void*
, il che lo ha reso in qualche modo inutile. In quei giorni, era accettato che tu usassi 0
(zero) per puntatori null.
Fino ad oggi, ho continuato a usare zero come puntatore null, ma quelli intorno a me insistono per usarlo NULL
. Personalmente non vedo alcun vantaggio nel dare un nome ( NULL
) a un valore esistente - e poiché mi piace anche testare i puntatori come valori di verità:
if (p && !q)
do_something();
quindi l'uso di zero ha più senso (come in se si utilizza NULL
, non è possibile utilizzare logicamente p && !q
- è necessario confrontare esplicitamente NULL
, a meno che non si supponga che NULL
sia zero, nel qual caso perché utilizzare NULL
).
C'è qualche motivo oggettivo per preferire zero a NULL (o viceversa), o è solo una preferenza personale?
Modifica: dovrei aggiungere (e intendevo dire originariamente) che con RAII ed eccezioni, uso raramente puntatori zero / NULL, ma a volte ne hai ancora bisogno.