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

前端 未结 3 1177
再見小時候
再見小時候 2021-01-01 13:38

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. S

相关标签:
3条回答
  • 2021-01-01 13:47

    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.

    0 讨论(0)
  • 2021-01-01 13:49

    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.

    0 讨论(0)
  • 2021-01-01 13:55

    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
    }
    
    0 讨论(0)
提交回复
热议问题