A member function pointer can be set to 0,and provIDes the operators
== and !=,but only for member function pointers of the same class.
我正在努力理解C 11,§5.10.
在§5.10/ 1中它说
Pointers of the same type (after pointer conversions) can be compared
for equality.
在§5.10/ 2中它说
Otherwise if either is a pointer to a virtual member function,the
result is unspecifIEd.
现在考虑以下测试程序.
#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;}
根据标准,断言是真的还是未指定的?
解决方法 我认为指向成员的一般指针是对象地址的转换.在指向虚方法的情况下,我认为细节取决于实现.在一般情况下,我认为这样做是个坏主意,但是如果指针在asignation期间被解析为正确的覆盖,它必须作为成员函数的标准指针,并且比较是移位比较和方法签名比较.检查reinterpret_cast以查看发生的情况. 总结以上是内存溢出为你收集整理的c – 虚拟成员函数的指针是否具有可比性?全部内容,希望文章能够帮你解决c – 虚拟成员函数的指针是否具有可比性?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)