¿Usas NULL o 0 (cero) para los punteros en C ++?

En los primeros días de C ++ cuando se atornillaba encima de C, no podía usar NULL ya que se definía como(void*)0. No se pudo asignar NULL a ningún otro puntero que no seavoid*, lo que lo hizo un poco inútil. En aquellos días, fue aceptado que usaste0 (cero) para punteros nulos.

Hasta el día de hoy, he seguido utilizando el cero como un puntero nulo, pero los que me rodean insisten en usarNULL. Personalmente no veo ningún beneficio en dar un nombre (NULL) a un valor existente, y como 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 si usasNULL, no puedes usar lógicamentep && !q - Necesitas comparar explícitamente contraNULL, a menos que asumaNULL es cero, en cuyo caso por qué usarNULL).

¿Hay alguna razón objetiva para preferir cero sobre NULL (o viceversa), o es solo una preferencia personal?

Edición: Debo agregar (y se supone que originalmente se diga) que con RAII y las excepciones, rara vez utilizo los punteros cero / NULL, pero a veces todavía los necesita.

Respuestas a la pregunta(21)

Su respuesta a la pregunta