В первые дни C ++, когда он был прикреплен к C, вы не могли использовать NULL, как это было определено как (void*)0
. Вы не можете присвоить NULL любому указателю, кроме void*
, что делает его бесполезным. В те дни было принято, что вы использовали 0
(ноль) для нулевых указателей.
До сих пор я продолжал использовать ноль в качестве нулевого указателя, но те, кто вокруг меня, настаивают на использовании NULL
. Лично я не вижу никакой выгоды в присвоении имени ( NULL
) существующему значению - и так как мне также нравится проверять указатели как значения истинности:
if (p && !q)
do_something();
тогда использование нуля имеет больше смысла (например, если вы используете NULL
, вы не можете логически использовать p && !q
- вам нужно явно сравнить с NULL
, если вы не предполагаете, что NULL
это ноль, и в этом случае зачем использовать NULL
).
Есть ли объективная причина предпочесть ноль, а не NULL (или наоборот), или все это просто личные предпочтения?
Изменить: я должен добавить (и изначально хотел сказать), что с RAII и исключениями, я редко использую указатели нуля / NULL, но иногда они вам все еще нужны.