深度探索C++对象模型对this的描述是,this是一个函数参数
float manitude3d(const Point3d *_this){...}
float Point3d::manitude3d()const{...}
这两种方式是等价的,编译器在内部将后者转化为前者,因此
obj.magintude();变成了maginitude_7Point3dFv(&obj);
如何理解“编译器在内部将后者转化为前者”这一句话呢?我们知道世界上第一个C++编译器是Cfront,Bjarne Stroustrup,Lippman等人开发的,那在当时最流行的编程语言是C,在各种机器各种操作系统下都有C的编译器版本,这样C的程序在当时是最易移植的,因此Bjarne Stroustrup决定Cfront生成等价的C代码以获得可移植性。就是说Cfront读入你编写的.cpp文件经过词法分析等编译过程,结果没有生成.obj文件却生成了一个.c文件,然后再用C编译器对.c文件进行编译链接,最终生成的程序是一个彻头彻尾的C程序(所以Cfront也被称为C 预处理器) |