12

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

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

void DoSomething(GetLabelFunc funcGetLabel);

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

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

4

1 回答 1

14

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

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

于 2012-04-27T12:51:09.237 回答