#include <iostream>
using namespace std;
class Test
{
public:
void func()
{
cout << "test" << endl;
}
};
int main()
{
Test a;
a.func();
return 0;
}
这样一段很平常的代码,a.func()调用了对象a的成员函数func()。
在C++的对象模型中,除了非静态成员变量以及虚函数指针会被放置在对象中,其余的比如成员函数等的信息都不会保存下来。访问对象的虚函数时我们可以通过vptr指针访问virtual table,virtual table存放了指向虚函数的指针。
但是访问普通的成员函数时,并没有保存关于该成员函数的任何信息,也就是说相当于C语言中普通的一个函数,

C++中的成员函数并非存储在对象中,而是通过编译期转换为普通函数,并在调用时将对象的地址(this指针)作为隐藏参数传递,实现对象与成员函数的联系。即使空指针也能调用成员函数,不会立即导致崩溃,因为仅传递地址而无读写操作。汇编代码显示了成员函数调用时参数如何存储和传递。
最低0.47元/天 解锁文章
485

被折叠的 条评论
为什么被折叠?



