Up to this point, we have always used nullptr to represent the null pointer. In older C++ programs, however, you may notice that instead of using nullptr, they use what appears to be an integer 0. In the original C++ specification, this was actually the case: 0 was the null pointer; however, with the introduction of the C++ 2011 standard (C++11), a new keyword nullptr was introduced, and the use of 0 as the null pointer was discouraged.
#include <iostream> void f( int n ) { std::cout << "The argument is an integer..." << std::endl; } void f( void *n ) { std::cout << "The argument is a pointer..." << std::endl; } int main(); int main() { int n{0}; // Which 'f(...)' is called? f( n ); f( 0 ); f( nullptr ); return 0; }
How did your compiler interpret 0? This ambiguity is why C++11 introduced the nullptr keyword.
If you are using a pre-C++11 compiler and you never-the-less want to use nullptr for clarity, you can always use:
#define nullptr 0
however, you must be aware that this does not prevent the ambiguity described above.