如何比较 C++ 中的函数指针?稳定吗?
例如,这样的事情是否有效:
if(pFnc == &myFnc){
//Do something
}
==(等于)和 !=(不等于)运算符与关系运算符具有相同的语义限制、转换和结果类型,但它们的优先级较低和真值结果除外。[注意:只要 a < b 和 c < d 具有相同的真值,a < b == c < d 就为真。]指向相同类型的对象或函数的指针(在指针转换之后)可以比较是否相等。相同类型的两个指针比较相等当且仅当它们都为空,都指向同一个函数,或都表示相同的地址(3.9.2)。
强调我的。
函数指针本质上是一个内存地址,就像 C++ 中的任何其他指针一样。因此,在比较指针时,您总是在比较内存地址而不是值,这意味着只要两个指针属于同一类型,这些指针指向的内容并不重要。
两者pFnc
和myFnc
都必须定义。正确的比较应该是:
if(pFnc == myFnc)
{
//Do something
}