读取一些代码我发现一个类只接受新的C ++ 11 nullptr_t
作为参数。该课程如下所示。
我是否纠正了我唯一可以通过nullptr
使用{@ 1}}构建对象的方法?
class CA {
public:
CA(nullptr_t) {}
};
答案 0 :(得分:6)
该标准在§2.14.7.1中规定:
指针文字是关键字
nullptr
。它是std::nullptr_t
类型的prvalue。 [注意:std::nullptr_t
是一种不同的类型,它既不是指针类型,也不是指向成员类型的指针;相反,这种类型的prvalue是一个空指针常量,可以转换为空指针值或null成员指针值。 -endnote]
类型nullptr_t
的唯一prvalue是nullptr
,然后可以按照§4.10和§4.11中规定的规则转换为其他指针类型。
根据§4.10.1,其他整数文字可以转换为std::nullptr_t
类型的值:
空指针常量是整数文字(2.14.2),其值为零或prvalue类型为
std::nullptr_t
。
因此,您可以使用值为零或nullptr
的整数文字。
具体做法是:
0
0u
,0U
0l
,0L
0ul
,0uL
,0Ul
,0UL
0ll
,0LL
0ull
,0uLL
,0ULL
nullptr
NULL
我可能会遗漏一些案件,所以可以随意纠正我。
答案 1 :(得分:4)
我是否认为我唯一可以通过使用nullp来构造对象?
没有。这将在§4.10[conv.ptr]:
中介绍整数类型的空指针常量可以转换为
std::nullptr_t
类型的prvalue。
其中空指针常量定义如下:
空指针常量是一个整数文字(2.14.2),其值为零或prvalue类型为
std::nullptr_t
。
换句话说,也可以使用值为0的各种整数文字调用构造函数:
CA{ 0 };
CA{ 0u };
CA{ 0LL };
CA{ 0x0 };
答案 2 :(得分:2)
根据文件:
std :: nullptr_t是空指针文字的类型,nullptr。
这意味着是的,您只能使用 nullptr 或相应的整数值构建此对象(如下面的答案中所述)。 查看this示例,因为它显示了您需要它的情况。