[英]member function pointer conversion
#include <iostream>
using namespace std;
class A {
};
typedef void (A::*funA)(int);
class B : public A {
public:
void m(int) {std::cout << "mm" << std::endl; }
void n(int) { std::cout << "nn"<<std::endl; }
};
typedef void (B::*funB)(int);
class C : public B {
public:
void g(int) {std::cout << "gg" << std::endl; }
void h(int) { std::cout << "hh"<<std::endl; }
};
typedef void (C::*funC)(int);
int main() {
funB f = static_cast<funB>(&C::m);
A* pa = new A;
(pa->*(static_cast<funA>(f)))(2);
return 0;
}
gcc编译并输出“ mm”。 但是为什么这可以工作呢? 实际上,A类没有定义任何功能。 似乎类可以通过这种方式使用其基类或派生类函数,即使它没有定义它们。
由于A
不包含f
引用的成员,因此行为是不确定的。
无论如何,它可能起作用的可能原因是函数B::m
不会触碰this
指针,因此在错误类型的对象上调用它时,它不会“注意”。 另外, A
和B
不是多态的,因此取消引用成员指针并进行调用不需要检查任何vptr。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.