高质量程序设计指南c++/c语言(3)–c++编译器如何处理成员函数

       在编译器眼中,同一个函数只存在一个实现,不管是全局函数还是成员函数。那么c++是如何处理类的成员函数的呢?实际上,c++通过name-mangling技术把每一个成员函数都转换成了名字唯一的全局函数,并把通过对象、指针或者引用对每一个成员函数的调用语句都改写成为相应的全局函数调用语句。每一个非静态数据成员函数都会被添加一个本类对象的指针作为第一个参数,这就是this指针的由来,然后再运用name-mangling技术处理。例如Rectangle类的SetLength成员函数被编译器改写后的样子可能是:

       void _SetLength@Rectangle$2F&pf@GS(Rectangle *this, float length)   //全局函数

       {

             this->m_length = length;

       }

由此调用语句rec1.SetLength(100.5)被改写成  ::_SetLength@Rectangle$2F&pf@GS(&rec1, 100.5);

编译器对数据成员也会进行name-mangling处理。不同的c++编译器对class的成员函数、数据成员和全局函数的name-mangling方案是不同的,这是造成不同编译器之间连接兼容性的主要原因之一。

原文链接: https://www.cnblogs.com/zzj3/archive/2013/04/26/3044848.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    高质量程序设计指南c++/c语言(3)--c++编译器如何处理成员函数

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/86060

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午10:22
下一篇 2023年2月9日 下午10:22

相关推荐