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