gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:16:55 25 4
gpt4 key购买 nike

我读了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;
}

根据标准,断言是正确的还是未指定的?

最佳答案

我认为指向成员的一般指针是对对象地址的转换。在指向虚方法的指针的情况下,我认为细节取决于实现。在一般情况下,我认为这样做是个坏主意,但如果指针在赋值期间被解决为正确的覆盖,它必须作为指向成员函数的标准指针工作,并且比较是移位比较加上方法签名比较。检查 reinterpret_cast to long 看看会发生什么。

关于c++ - 指向虚拟成员函数的指针是否具有可比性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29455791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com