camh camh - 10 days ago 7
C++ Question

Do you use NULL or 0 (zero) for pointers in C++?

In the early days of C++ when it was bolted on top of C, you could not use NULL as it was defined as

(void*)0
. You could not assign NULL to any pointer other than
void*
, which made it kind of useless. Back in those days, it was accepted that you used
0
(zero) for null pointers.

To this day, I have continued to use zero as a null pointer but those around me insist on using
NULL
. I personally do not see any benefit to giving a name (
NULL
) to an existing value - and since I also like to test pointers as truth values:

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


then using zero makes more sense (as in if you use
NULL
, you cannot logically use
p && !q
- you need to explicitly compare against
NULL
, unless you assume
NULL
is zero, in which case why use
NULL
).

Is there any objective reason to prefer zero over NULL (or vice versa), or is all just personal preference?

Edit: I should add (and meant to originally say) that with RAII and exceptions, I rarely use zero/NULL pointers, but sometimes you do need them still.

Answer

Here's Stroustrup's take on this: C++ Style and Technique FAQ

In C++, the definition of NULL is 0, so there is only an aesthetic difference. I prefer to avoid macros, so I use 0. Another problem with NULL is that people sometimes mistakenly believe that it is different from 0 and/or not an integer. In pre-standard code, NULL was/is sometimes defined to something unsuitable and therefore had/has to be avoided. That's less common these days.

If you have to name the null pointer, call it nullptr; that's what it's called in C++11. Then, nullptr will be a keyword.

That said, don't sweat the small stuff.