由编译器代替成员函数的函数指针的代码
问题描述:
在下面的例子中,我很难理解函数指针对成员函数的调用。由编译器代替成员函数的函数指针的代码
(f.*(FPTR) bp)(0); // This call b()
(b.*(BPTR) fp)(0); // This call f()
我想知道的代码替换(因为我知道一个函数调用像obj.Fun()被替换为乐(& OBJ)编译器为这两个函数调用时,这些成员函数是虚拟和非虚拟 谁能帮助我了解,请
我想了解更多这样的链接解释:?http://www.learncpp.com/cpp-tutorial/8-8-the-hidden-this-pointer/
#include <iostream>
using std::cout;
using std::endl;
class Foo
{
public:
void f(int i = 0)
{
cout << "Foo" << endl;
}
};
class Bar
{
public:
void b(char c = 'b')
{
cout << "Bar" << endl;
}
};
int main()
{
typedef void (Foo::*FPTR) (int);
typedef void (Bar::*BPTR) (char);
FPTR fp = &Foo::f;
BPTR bp = &Bar::b;
Foo f;
Bar b;
/*
* we are casting pointer to non-compatible type here
* Code works, but want to know how it is.
*/
(f.*(FPTR) bp)(0);
(b.*(BPTR) fp)(0);
return 0;
}
感谢
_I想知道编译器为这两个函数调用生成的代码_和..你不能编译成汇编,并寻找自己,因为......? –
我不是说汇编代码。我对时尚感兴趣。像obj.Fun()被Fun(&obj) –
取代你的无效投射产生UB。 – Jarod42