简体   繁体   中英

What are the uses of the type `std::nullptr_t`?

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?

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
}

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 .

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM