C++11实现是否将NULL
定义为nullptr
?
这是否是新的C++标准所规定的?
权威消息
C.3.2.4 NULL宏 [diff.null]
1/ 宏NULL在任何一个头文件、、、、、或中定义,是国际标准(18.2)中的C++实现定义的空指针常量。
每个实现都需要提供自己的定义。如果我没记错的话,gcc将其定义为__nullptr
,并进行了特殊检查(例如验证它不在算术上下文中使用)。
因此,将其定义为nullptr
是可能的,您需要检查编译器/标准库文档以了解已经完成了什么工作。
nullptr
,尽管有人提出了这种更改。 - Bo Persson'\0'
)。个人而言,我不介意破坏这样的代码,但是向后兼容性却是一个严苛的主人。 - Keith Thompson在即将发布的标准C++11中,整数表达式仍然是一个空指针常量。NULL宏仍然是实现定义的,但必须是一个空指针常量。因此,在实践中,它意味着它和0一样好,或者可以使用nullptr。
您以前使用的代码中使用0或NULL的部分仍然可以正常工作。
详细信息请阅读这里。
int i = NULL;
这样的代码将不再起作用,但是这是允许的。使用NULL的代码在某些编译器上将不会“像以前一样工作”,因此你的答案是错误的。 - SjoerdNULL来自C语言,因此它的定义必须与C和C++兼容。所以它不能是nullptr,因为那是C++关键字,不是C,除非它在C和C++中有不同的定义(我们可以使用#ifdef __cplusplus来区分它们)。因此,NULL通常被定义为特定于编译器的东西,比如在gcc中是__nullptr,或者只是((void*)0)。