Answers:
NULL
不是关键字。这是一些标准标头中定义的标识符。您可以包括
#include <cstddef>
使其具有范围,包括一些其他基础知识,例如std::size_t
。
nullptr
关键字,它是一个实际的关键字,不需要任何#include
s。它也比更具类型安全性NULL
。
GCC正在朝C ++ 11迈进,这也许就是为什么您现在需要包括cstddef才能使用NULL常量的原因。C ++ 11中的首选方法是使用新的nullptr关键字,此关键字自4.6版开始在GCC中实现。nullptr不能隐式转换为整数类型,因此可以用于消除对指针类型和整数类型均已重载的函数的调用的歧义:
void f(int x);
void f(void * ptr);
f(0); // Passes int 0.
f(nullptr); // Passes void * 0.
NULL
从来都不是内置关键字;它是在几个标准C标头中定义的宏,包括<stddef.h>
(或<cstddef>
)。gcc“迈向C ++ 11的步骤”如何影响这一点?我在这个问题中没有发现任何暗示用旧版本的gcc / g ++或语言版本的早期版本编译的(看不见的)代码。