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
是一个表示空指针常量的关键字.它是类型nullptr_t
,可以隐式转换,可与任何指针类型或指向成员类型的类型相媲美.
阅读这些,