nullptr不是特殊关键字和std :: nullptr_t的对象吗?

iam*_*ind 4 c++ pointers nullptr c++11

可能重复:
nullptr究竟是什么?

我首先认为这是一个关键字.我目前的gcc没有nullptr以不同的色调突出显示.为了验证这一点,我写了以下内容:

void *&p = nullptr;
Run Code Online (Sandbox Code Playgroud)

所以我从错误中得到了一些线索:

错误:从'std :: nullptr_t'类型的右值开始,无效初始化'void*&'类型的非const引用

如果nullptr是一个对象那么它真的是一个简单的指针0吗?换句话说,假设我写道:

#define NULL nullptr
Run Code Online (Sandbox Code Playgroud)

以上语句是否不会改变我的代码中的任何内容?此外,了解std::nullptr_t类型的其他用例会很有趣.

Ale*_*ler 10

它是一个关键字,标准草案说(lex.nullptr):

指针文字是关键字nullptr.它是std :: nullptr_t类型的prvalue.

nullptr还不是一个指针,但它可以被转换为指针类型.这禁止您的上述赋值,这是对不相关引用类型的赋值,在这种情况下不可能进行转换(请考虑int& a = 1.f;!).

#define NULL nullptr除非您NULL在上下文中使用,否则不应该改变行为int i = 4; if(NULL == i) {},nullptr因为nullptr不能将其视为整数文字.

我不认为还有很多其他用例std::nullptr_t,它只是一个哨兵,因为nullptr需要一种类型.

  • `nullptr_t`有一个小用途.如果你有几个重载采用不同的指针类型,那么`nullptr`到指针的转换将是不明确的.您可以使用`nullptr_t`重载来消除歧义. (2认同)

Naw*_*waz 6

nullptr是一个表示空指针常量的关键字.它是类型nullptr_t,可以隐式转换,可与任何指针类型或指向成员类型的类型相媲美.

阅读这些,