12

関数ポインタを受け入れる関数を作成しました。例:

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

void DoSomething(GetLabelFunc funcGetLabel);

関数はnullポインターを受け取る可能性があり、その場合は空の文字列を返します。これは、パラメーターとしてNULLとnullptrを使用する場合にも、MSVC ++ 2010で完全に正常に機能しますが、このような特殊なケースでは、コンパイルの成功は安全な港とは見なされません...

ここで、渡すことは関数ポインターの場合nullptrと同等かどうか疑問に思いました。NULL私が尋ねている理由は、例えばvoid*、関数ポインタを受け入れない(または少なくともそれは使用されるべきではない)からです。したがって、nullptrを関数ポインターに使用してはならないという同様の理由があるかもしれません。つまり、オブジェクトポインターに対してのみ機能するように設計されているのでしょうか。

4

1 に答える 1

14

はい、nullptr は、関数ポインター型を含むすべてのポインター型の null ポインター値に変換できるように指定されています。

[conv.ptr] 4.10/1 および [basic.compound] 3.9.2/3 を参照してください。

于 2012-04-27T12:51:09.237 に答える