nullptr不是特殊的关键字和std :: nullptr_t的对象吗? [英] Is nullptr not a special keyword and an object of std::nullptr_t?
问题描述
可能重复:
究竟是什么nullptr?
我以为这是一个关键字。我目前的gcc不以不同的阴影突出显示 nullptr
。为了验证这一点,我写了以下:
void *& p = nullptr;
所以我从错误中得到了一些线索:
错误:类型为'void *&'的非常量引用的初始化无效从'std :: nullptr_t'类型的右值
b
如果 nullptr
是一个对象,那么它实际上是一个等价于简单 0
?换句话说,假设我写:
#define NULL nullptr
上面的语句不会改变我的代码中的任何东西吗?此外,有趣的是知道 std :: nullptr_t
类型的其他用例。
这是一个关键字,标准草案说明( lex.nullptr ):
指针字面值是关键字nullptr。它是std :: nullptr_t类型的prvalue。
nullptr
不是一个指针,而是可以转换为指针类型。这禁止你的上述赋值,这是一个无关的引用类型的赋值,在这种情况下不可能进行转换(考虑 int& a = 1.f;
! / p>
Doing #define NULL nullptr
不应该改变行为,除非你使用 NULL
在上下文中,例如 int i = 4; if(NULL == i){}
,因为 nullptr $ c $
我不认为有很多其他用例 std :: nullptr_t
,它只是一个哨兵,因为 nullptr
需要一个类型。
Possible Duplicate:
What exactly is nullptr?
I first thought it's a keyword. My present gcc doesn't highlight nullptr
in a different shade. To verify that, I wrote following:
void *&p = nullptr;
So I got some clue from the error that:
error: invalid initialization of non-const reference of type ‘void*&’ from an rvalue of type ‘std::nullptr_t’
If nullptr
is an object then is it really a pointer equivalent of simple 0
? In other word, suppose I write:
#define NULL nullptr
Is the above statement doesn't alter anything in my code ? Also, it would be interesting to know other use cases for std::nullptr_t
type as such.
It is a keyword, the standard draft says (lex.nullptr):
The pointer literal is the keyword nullptr. It is a prvalue of type std::nullptr_t.
the nullptr
is not yet a pointer, but it can be converted to a pointer type. This forbids your above assignment, which is an assignment to an unrelated reference type, in which case no conversion is possible (consider int& a = 1.f;
!).
Doing #define NULL nullptr
shouldn't alter the behaviour unless you did use NULL
in a context such as int i = 4; if(NULL == i) {}
, which won't work with nullptr
because nullptr
is can't be treated as an integer literal.
I don't think there are many other use-cases for std::nullptr_t
, it's just a sentinel because nullptr
needs a type.
这篇关于nullptr不是特殊的关键字和std :: nullptr_t的对象吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!