C++ “std::nullptr\u t”类型有什么用途?

C++ “std::nullptr\u t”类型有什么用途?,c++,c++11,nullptr,C++,C++11,Nullptr,我了解到,nullptr,除了可以转换为任何指针类型(但不能转换为任何整数类型)之外,还有自己的类型std::nullptr\t。因此,有一个方法重载可以接受std::nullptr\t 究竟为什么需要这样的重载?如果有多个重载接受指针类型,则必须为std::nullptr\t重载才能接受nullptr参数。如果没有std::nullptr\u t重载,则传递nullptr时应该选择哪个指针重载是不明确的 例如: void f(int *intp) { // Passed an int

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


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

如果有多个重载接受指针类型,则必须为
std::nullptr\t
重载才能接受
nullptr
参数。如果没有
std::nullptr\u 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
}

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


例如,
std::function
的重载只能将
nullptr\u t
作为参数来判断函数对象是否为空。有关更多详细信息,您可以阅读。

此外,您会给它提供什么其他类型,而不是简单地重新介绍我们使用
NULL
时遇到的问题?关键是要消除令人讨厌的隐式转换,但我们实际上无法改变旧程序的行为,所以我们就在这里。

是否可以通过强制转换nullptr来解决歧义?e、 g.
f((int*)nullptr);f((char*)nullptr)
?@Dai:当然,但这对用户来说太笨重了。不过,这些强制转换仍然可以用于自愿选择另外两个重载中的一个。