sj7*_*755 3 c++ compiler-construction optimization header
我已经看到一个类的代码放在一个单独的C++中,而方法定义放在头文件中.我的第一个OOP经验是使用Java,其中所有方法都放在类文件中,我实际上更喜欢这个.
将所有方法放在头文件中会影响编译器生成的汇编代码吗?
如果是这样,将类的整个代码放在头文件中对性能有害吗?
关键是复杂的C++程序是通过编译多个对象,然后将它们链接在一起而创建的.每个对象通常来自编译一个实现文件(例如".cpp",".cc"等),其可以直接和间接地包括许多头部.因此,如果你编写一个好类并将代码放入头中,那么该代码可以包含在多个目标文件中,然后编译器会冗余地生成它,而且 - 链接器不会(并且不能轻易地)比较查看它们是否相同的版本并删除冗余副本(如果使用相对地址则更容易 - "位置无关代码" - 但这是另一个故事).另见jalf的评论如下.
因此,您不希望标题中包含不同的外部函数.如果它们名义上是inline函数 - 由于使用了inline关键字或在类中定义 - 那么编译器将只需承担额外的工作并确保它们的任何外联版本在可执行文件中唯一地表示.但是,对于脱机功能,程序员仍然负担沉重.
此外,如果在头文件中提供实现,则会为每个对象进行冗余编译,对头文件的任何更改都将强制重新编译所有的从属对象.可以更改单独对象中的外部函数,重新编译单个对象,然后可以将其与其他预先存在的对象链接以形成新的可执行文件.在大型项目中,这节省了大量的编译时间.
| 归档时间: |
|
| 查看次数: |
913 次 |
| 最近记录: |