我创建了一个接受函数指针的函数,例如
typedef CString(*GetLabelFunc)(const CSomeObject* const pObject);
void DoSomething(GetLabelFunc funcGetLabel);
该函数可能会收到一个空指针,并在这种情况下返回一个空字符串。当使用NULL和nullptr作为参数时,这在MSVC ++ 2010中完全正常 - 但我不认为在这种特殊情况下成功编译是安全港......
现在我想知道传递nullptr
是否等同于NULL
的函数指针。我之所以要问的是,例如void*
不接受函数指针(或者至少它不应该被使用)。所以也许有一个类似的原因,nullptr不应该用于函数指针 - 这意味着它是否只适用于对象指针?
答案 0 :(得分:8)
是的,nullptr被指定为可转换为所有指针类型的空指针值,包括函数指针类型。
见[conv.ptr] 4.10 / 1和[basic.compound] 3.9.2 / 3.