Você usa NULL ou 0 (zero) para ponteiros em C ++?

Nos primórdios do C ++, quando ele era parafusado na parte superior de C, não era possível usar NULL como ele foi definido como(void*)0. Você não pode atribuir NULL a nenhum outro ponteirovoid*, o que tornou inútil. Naquela época, aceitava-se que você usasse0 (zero) para ponteiros nulos.

Até hoje, continuei usando zero como um ponteiro nulo, mas os que estão ao meu redor insistem em usarNULL. Eu pessoalmente não vejo nenhum benefício em dar um nome (NULL) para um valor existente - e também gosto de testar ponteiros como valores verdadeiros:

if (p && !q)
  do_something();

então usar zero faz mais sentido (como se você usarNULL, você não pode usar logicamentep && !q - você precisa comparar explicitamente comNULL, a menos que você assumaNULL é zero, caso em que por que usarNULL).

Existe alguma razão objetiva para preferir zero sobre NULL (ou vice-versa), ou é tudo apenas uma preferência pessoal?

Edit: Eu deveria adicionar (e quis dizer originalmente) que com RAII e exceções, eu raramente uso ponteiros de zero / NULL, mas às vezes você ainda precisa deles.

questionAnswers(21)

yourAnswerToTheQuestion