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 就为真。]指向相同类型的对象或函数的指针(在指针转换之后)可以比较是否相等。相同类型的两个指针比较相等当且仅当它们都为空,都指向同一个函数,或都表示相同的地址(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 回答