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

Abr*_*ile 5 nullptr c++11

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

我是否纠正了我唯一可以通过专门使用构造对象的东西nullptr?

class CA {
 public:
 CA(nullptr_t) {}  
};
Run Code Online (Sandbox Code Playgroud)

Sho*_*hoe 6

该标准在§2.14.7.1中规定:

指针文字是关键字nullptr.它是一种类型的prvalue std::nullptr_t.[注意:std::nullptr_t是一种不同的类型,既不是指针类型也不是指向成员类型的指针; 相反,这种类型的prvalue是一个空指针常量,可以转换为空指针值或null成员指针值.-endnote]

类型的唯一prvalue nullptr_t是nullptr其然后转化为以下中§4.10和§4.11指定的规则的其他指针类型.

其他整数文字可以std::nullptr_t按照§4.10.1 转换为类型的值:

空指针常量是一个整数文字(2.14.2),其值为零或prvalue类型std::nullptr_t.

因此,您可以使用值为零或的值为interger的文本nullptr.

特别:

  • 0
  • 0u, 0U
  • 0l, 0L
  • 0ul,0uL,0Ul,0UL
  • 0ll, 0LL
  • 0ull,0uLL,0ULL
  • nullptr
  • NULL

我可能会遗漏一些案件,所以可以随意纠正我.


Pio*_*cki 4

\n

我是否正确地认为,我唯一可以通过专门使用 nullptr 来构造对象?

\n
\n\n

不。这在 \xc2\xa74.10 [conv.ptr] 中有介绍:

\n\n
\n

整型的空指针常量可以转换为类型的纯右值std::nullptr_t。

\n
\n\n

其中空指针常量定义如下:

\n\n
\n

空指针常量是一个整数文字 (2.14.2),其值为 0 或类型的纯右值std::nullptr_t。

\n
\n\n

换句话说,您的构造函数也可以使用各种值为 0 的整数文字来调用:

\n\n
CA{ 0 };\nCA{ 0u };\nCA{ 0LL };\nCA{ 0x0 };\n
Run Code Online (Sandbox Code Playgroud)\n