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 NULLsia 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.