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

时间:2012-04-27 12:44:25

标签: c++ c++11 function-pointers

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

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

void DoSomething(GetLabelFunc funcGetLabel);

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

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

1 个答案:

答案 0 :(得分:8)

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

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