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