我看了an article说
成员函数指针可以设置为0,并提供运算符 ==和!=,但仅适用于同一类的成员函数指针。
我正在尝试理解C ++ 11,§5.10。
在§5.10/ 1 中说
可以比较相同类型的指针(指针转换后) 为了平等。
在§5.10/ 2 中说
否则,如果要么是指向虚拟成员函数的指针,那么 结果未指定。
现在考虑以下测试程序。
#include <cassert>
class ISomeClass
{
public:
virtual ~ISomeClass() {}
virtual void a() = 0;
virtual void b() = 0;
};
int main()
{
typedef void(ISomeClass::*MemberPtr)();
MemberPtr mp = &ISomeClass::a;
assert( mp == &ISomeClass::a );
assert( mp != &ISomeClass::b );
return 0;
}
根据标准,断言是真的还是未指定的?
答案 0 :(得分:1)
我认为指向成员的一般指针是对象地址的转换。在指向虚方法的情况下,我认为细节取决于实现。在一般情况下,我认为这样做是个坏主意,但是如果指针在asignation期间被解析为正确的覆盖,它必须作为成员函数的标准指针,并且比较是移位比较和方法签名比较。检查reinterpret_cast以查看会发生什么。