我可以将nullptr转换为其他指针类型吗?

Nar*_*rek 14 c++ c++11

我可以这样做吗?

static_cast<A*>(getSomePtr());
Run Code Online (Sandbox Code Playgroud)

哪里getSomePtr()会回来nullptr.这个可以吗?

Luk*_*řík 17

来自维基百科的文章:

...空指针常量:nullptr.它是类型 nullptr_t,可以隐式转换,可与任何指针类型或指向成员类型的类型相媲美.它不是可隐式转换的或与积分类型相当的,除了bool.

nullptr可以隐式转换为任何指针类型,因此显式转换static_cast绝对有效.

  • 如果你推导函数的返回类型,并且在一个分支中你有“return nullptr”,而其他分支中有其他内容,则推导将失败,除非你显式强制转换“nullptr”。 (2认同)

Jon*_*ely 6

我怀疑你感到困惑的区别一个空指针nullptr他们是不一样的.

该函数返回nullptr:

std::nullptr_t getNullPtr() { return nullptr; }
Run Code Online (Sandbox Code Playgroud)

但是返回这是一件相当无用的事情,很少有理由返回该类型的对象.

此函数返回一个空指针:

A* getAPtr() { return nullptr; }
Run Code Online (Sandbox Code Playgroud)

返回值初始化,nullptr但它实际上是类型的空指针A*,而不是nullptr它自身.

对于第一个函数,是的,您可以将返回的转换std::nullptr_t为另一个指针类型(您甚至不需要转换来进行转换,它会隐式发生)但这可能不是您想要做的事情.

对于第二个函数,您不需要强制转换它,因为它已经返回了正确的类型.