camh camh - 1 year ago 79
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

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

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

if (p && !q)

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

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 Source

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.