16

C++ で関数ポインタを比較するにはどうすればよいですか? 安定していますか?

たとえば、次のようなものは有効でしょうか。

if(pFnc == &myFnc){
//Do something
}
4

3 に答える 3

16

C++03 5.10/1 [expr.eq]:

== (等しい) および != (等しくない) 演算子には、優先順位が低く、真偽値の結果を除いて、関係演算子と同じ意味制限、変換、および結果の型があります。[注: a < b == c < d は、a < b と c < d が同じ真理値を持つときはいつでも真です。]同じ型 (ポインター変換後) のオブジェクトまたは関数へのポインターは、等しいかどうかを比較できます。同じ型の 2 つのポインターは、両方が null であるか、両方が同じ関数を指しているか、または両方が同じアドレスを表している場合にのみ、等しいと比較されます (3.9.2)。

鉱山を強調します。

于 2012-10-15T14:55:44.630 に答える
2

関数ポインターは、基本的に、C++ の他のポインターと同様にメモリ アドレスです。したがって、ポインタを比較するときは、常に値ではなくメモリ アドレスを比較します。つまり、両方のポインタが同じ型である限り、これらのポインタが何を指しているかは問題ではありません。

于 2012-10-15T14:54:26.430 に答える
0

との両方pFncmyFnc定義する必要があります。正しい比較は次のようになります。

if(pFnc == myFnc)
{
    //Do something
}
于 2012-10-15T14:55:31.357 に答える