`std :: nullptr_t`类型的用途是什么?

Hin*_*dol 19 c++ nullptr c++11

我了解到nullptr,除了可转换为任何指针类型(但不是任何整数类型)之外,还有自己的类型std::nullptr_t.因此可以接受一个方法重载std::nullptr_t.

究竟为什么需要这样的过载?

tor*_*ons 24

如果多个重载接受指针类型,std::nullptr_t则接受nullptr参数需要重载.如果没有std::nullptr_t重载,传递时应该选择哪个指针重载是不明确的nullptr.

例:

void f(int *intp)
{
    // Passed an int pointer
}

void f(char *charp)
{
    // Passed a char pointer
}

void f(std::nullptr_t nullp)
{
    // Passed a null pointer
}
Run Code Online (Sandbox Code Playgroud)

  • 不能通过转换nullptr来解决歧义吗?例如`f((int*)nullptr); f((char*)nullptr);`? (4认同)
  • @Dai:当然,但这对用户来说很笨拙. (4认同)

neu*_*ont 5

在某些特殊情况下,与nullptr_t类型进行比较有助于指示对象是否有效。

例如,operator==operator!=的重载std::function只能nullptr_t作为参数来判断函数对象是否为空。有关更多详细信息,您可以阅读这个问题