我读了一篇文章,其中提到:
成员函数指针可以设置为0,并提供相等和不相等运算符,但仅适用于同一类的成员函数指针。
我正在尝试理解C++11,§5.10。
在§5.10/1中,它说:
指针转换后,相同类型的指针可以进行比较。
在§5.10/2中,它说:
否则,如果其中一个是虚拟成员函数的指针,则结果是未指定的。
现在考虑以下测试程序。
成员函数指针可以设置为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;
}
根据标准,断言是真还是未指定的?