Nos primeiros dias do C ++, quando ele era aparafusado em cima de C, não era possível usar NULL como definido (void*)0
. Você não pode atribuir NULL a nenhum ponteiro além de void*
, o que o tornou meio inútil. Naqueles dias, era aceito que você usasse 0
(zero) para ponteiros nulos.
Até hoje, continuei usando zero como ponteiro nulo, mas aqueles que estão à minha volta insistem em usá-lo NULL
. Pessoalmente, não vejo nenhum benefício em atribuir um nome ( NULL
) a um valor existente - e como também gosto de testar ponteiros como valores verdadeiros:
if (p && !q)
do_something();
então, usar zero faz mais sentido (como se você usar NULL
, não é possível usar logicamente p && !q
- você precisa comparar explicitamente NULL
, a menos que assuma que NULL
é zero; nesse caso, por que usar NULL
).
Existe alguma razão objetiva para preferir zero a NULL (ou vice-versa), ou é apenas preferência pessoal?
Editar: devo adicionar (e pretendia dizer originalmente) que, com RAII e exceções, raramente uso ponteiros zero / NULL, mas às vezes você ainda precisa deles.