阅读一些代码,我发现一个类只接受新的 C++11nullptr_t
作为参数。该类如下所示。
我是否正确地认为我唯一可以通过使用来构造对象nullptr
?
class CA {
public:
CA(nullptr_t) {}
};
该标准在 §2.14.7.1 中规定:
指针文字是关键字
nullptr
。它是类型的prvaluestd::nullptr_t
。[注意:std::nullptr_t
是一种独特的类型,既不是指针类型也不是指向成员类型的指针;相反,这种类型的纯右值是一个空指针常量,可以转换为空指针值或空成员指针值。——尾注]
type 的唯一纯右值nullptr_t
是nullptr
可以按照 §4.10 和 §4.11 中指定的规则转换为其他指针类型。
std::nullptr_t
根据 §4.10.1 ,其他整数文字可以转换为类型值:
空指针常量是一个整数文字 (2.14.2),其值为 0 或类型为 prvalue
std::nullptr_t
。
因此,您可以使用值为零或的整数文字nullptr
。
具体来说:
0
0u
,0U
0l
,0L
0ul
, 0uL
, 0Ul
,0UL
0ll
,0LL
0ull
, 0uLL
,0ULL
nullptr
NULL
我可能会遗漏一些案例,所以请随时纠正我。
我是否正确地认为我唯一可以通过专门使用 nullptr 来构造对象?
不,这在 §4.10 [conv.ptr] 中有介绍:
整数类型的空指针常量可以转换为 prvalue 类型
std::nullptr_t
。
其中空指针常量定义如下:
空指针常量是一个整数文字 (2.14.2),其值为 0 或类型为 prvalue
std::nullptr_t
。
换句话说,您的构造函数也可以使用值为 0 的各种整数文字来调用:
CA{ 0 };
CA{ 0u };
CA{ 0LL };
CA{ 0x0 };
根据文档:
std::nullptr_t 是空指针字面量 nullptr 的类型。
这意味着是的,您只能使用nullptr或相应的整数值构造此对象(如下面解释的答案)。查看此示例,因为它显示了您需要它的情况。