C++ で関数ポインタを比較するにはどうすればよいですか? 安定していますか?
たとえば、次のようなものは有効でしょうか。
if(pFnc == &myFnc){
//Do something
}
C++ で関数ポインタを比較するにはどうすればよいですか? 安定していますか?
たとえば、次のようなものは有効でしょうか。
if(pFnc == &myFnc){
//Do something
}
== (等しい) および != (等しくない) 演算子には、優先順位が低く、真偽値の結果を除いて、関係演算子と同じ意味制限、変換、および結果の型があります。[注: a < b == c < d は、a < b と c < d が同じ真理値を持つときはいつでも真です。]同じ型 (ポインター変換後) のオブジェクトまたは関数へのポインターは、等しいかどうかを比較できます。同じ型の 2 つのポインターは、両方が null であるか、両方が同じ関数を指しているか、または両方が同じアドレスを表している場合にのみ、等しいと比較されます (3.9.2)。
鉱山を強調します。
関数ポインターは、基本的に、C++ の他のポインターと同様にメモリ アドレスです。したがって、ポインタを比較するときは、常に値ではなくメモリ アドレスを比較します。つまり、両方のポインタが同じ型である限り、これらのポインタが何を指しているかは問題ではありません。
との両方pFnc
をmyFnc
定義する必要があります。正しい比較は次のようになります。
if(pFnc == myFnc)
{
//Do something
}