我了解到nullptr
除了可以转换为任何指针类型(但不是任何整数类型)之外,还有自己的类型std::nullptr_t
。因此,可以使用接受std::nullptr_t
的方法重载。
究竟为什么需要这样的过载?
答案 0 :(得分:23)
如果多个重载接受指针类型,则需要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
}
答案 1 :(得分:0)
在某些特殊情况下,与nullptr_t
类型进行比较对于指示对象是否有效非常有用。
例如,std::function
的{{3}}重载只能将nullptr_t
作为参数来判断函数对象是否为空。有关详细信息,请阅读operator==
and operator!=
。
答案 2 :(得分:0)
此外,您还会给它其他什么类型的信息,而不是仅仅重新介绍我们在NULL
中遇到的问题?关键是要摆脱讨厌的隐式转换,但实际上我们无法更改旧程序的行为,所以我们就在这里。