将nullptr分配给函数指针变量是否安全?

Ale*_*lex 8 c++ function-pointers c++11

我创建了一个接受函数指针的函数,例如

typedef CString(*GetLabelFunc)(const CSomeObject* const pObject);

void DoSomething(GetLabelFunc funcGetLabel);
Run Code Online (Sandbox Code Playgroud)

该函数可能会收到一个空指针,并在这种情况下返回一个空字符串.当使用NULL和nullptr作为参数时,这在MSVC++ 2010中完全正常 - 但我不认为在这种特殊情况下成功编译是一个安全港...

现在我想知道传递nullptr是否等同NULL于函数指针.我之所以要问的是,例如void*不接受函数指针(或者至少它不应该被使用).所以也许有类似的原因,nullptr不应该用于函数指针 - 这意味着它是否只适用于对象指针?

bam*_*s53 10

是的,nullptr被指定为可转换为所有指针类型的空指针值,包括函数指针类型.

见[conv.ptr] 4.10/1和[basic.compound] 3.9.2/3.