问题
I learned that nullptr
, in addition to being convertible to any pointer type (but not to any integral type) also has its own type std::nullptr_t
. So it is possible to have a method overload that accepts std::nullptr_t
.
Exactly why is such an overload required?
回答1:
If more than one overload accepts a pointer type, an overload for std::nullptr_t
is necessary to accept a nullptr
argument. Without the std::nullptr_t
overload, it would be ambiguous which pointer overload should be selected when passed nullptr
.
Example:
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
}
回答2:
There are some special cases that comparison with a nullptr_t
type is useful to indicate whether an object is valid.
For example, the operator== and operator!= overloads of std::function
could only take nullptr_t
as the parameter to tell if the function object is empty. For more details you could read this question.
回答3:
Also, what other type would you give it, that doesn't simply re-introduce the problems we had with NULL
? The whole point is to get rid of the nasty implicit conversions, but we can't actually change behaviour of old programs so here we are.
来源:https://stackoverflow.com/questions/12066721/what-are-the-uses-of-the-type-stdnullptr-t