【发布时间】:2020-01-04 20:39:30
【问题描述】:
据我所知 nullptr 是某个类的实例,如下所示:
const
class {
public:
template<class T> // convertible to any type
operator T*() const // of null non-member
{ return 0; } // pointer...
template<class C, class T> // or any type of null
operator T C::*() const // member pointer...
{ return 0; }
private:
void operator&() const; // whose address can't be taken
} nullptr = {};
我猜
true
false
也是一些变量。那么,prvalue-s 是一种违反语言类型系统的肮脏黑客这一事实吗?
如果 nullptr 只是一个关键字,那么如何从中派生出 type 呢?
typedef decltype(nullptr) nullptr_t;
【问题讨论】:
-
不,
nullptr不是类的实例。true或false都不是。 -
那是什么?
-
这三个都是keywords。这意味着编译器将它们专门识别为任何其他文字值。
-
true、false和nullptr文字与42或'a'等其他文字并没有真正的不同。如果42是prvalue,为什么true不应该是prvalue? -
它们是值——
boolean类型或nullptr_t类型。
标签: c++ c++11 language-lawyer rvalue