C ++ nullptrt_t作为构造函数中的参数

时间:2014-11-25 07:57:55

标签: c++11 nullptr

读取一些代码我发现一个类只接受新的C ++ 11 nullptr_t作为参数。该课程如下所示。

我是否纠正了我唯一可以通过nullptr使用{@ 1}}构建对象的方法?

class CA {
 public:
 CA(nullptr_t) {}  
};

3 个答案:

答案 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
  • 0u0U
  • 0l0L
  • 0ul0uL0Ul0UL
  • 0ll0LL
  • 0ull0uLL0ULL
  • 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示例,因为它显示了您需要它的情况。