En los primeros días de C ++ cuando estaba atornillado encima de C, no podía usar NULL como se definió como (void*)0
. No puede asignar NULL a ningún puntero que no sea void*
, lo que lo hace un poco inútil. En aquellos días, se aceptaba que usabas 0
(cero) para punteros nulos.
Hasta el día de hoy, he seguido usando cero como puntero nulo, pero los que me rodean insisten en usarlo NULL
. Personalmente, no veo ningún beneficio en dar un nombre ( NULL
) a un valor existente, y dado que también me gusta probar los punteros como valores de verdad:
if (p && !q)
do_something();
entonces usar cero tiene más sentido (como en el caso de que lo use NULL
, no puede usarlo lógicamente p && !q
; debe compararlo explícitamente NULL
, a menos que suponga que NULL
es cero, en cuyo caso por qué usarlo NULL
).
¿Hay alguna razón objetiva para preferir cero sobre NULL (o viceversa), o todo es preferencia personal?
Editar: debería agregar (y tenía la intención de decir originalmente) que con RAII y excepciones, rara vez uso punteros cero / NULL, pero a veces todavía los necesita.