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

时间:2012-08-22 05:23:13

标签: c++ c++11 nullptr

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

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

3 个答案:

答案 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中遇到的问题?关键是要摆脱讨厌的隐式转换,但实际上我们无法更改旧程序的行为,所以我们就在这里。