c – 虚拟成员函数的指针是否具有可比性?

c – 虚拟成员函数的指针是否具有可比性?,第1张

概述我读了 an article说 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 th 我读了 an article说

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 – 虚拟成员函数的指针是否具有可比性?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1227571.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存