`

Effective C++ 阅读笔记(一)透彻了解inline以及降低编译依存关系

阅读更多
原帖地址:http://www.cnblogs.com/coder2012/archive/2013/06/07/3118363.html

inline内敛




1.类似于C中的#define


  在C++中,提供了inline函数来代替C中的宏定义。(通常可以使用const来代替单纯变量的宏定义,它可以提供类型检查。对于形似函数的宏,最好改用inline函数来替换宏定义。)


  编译器最优化机制通常被设计用来浓缩那些“不含函数调用“的代码,所以当你inline某个函数时,或许编译器就因此有能力对它执行语境相关最优化。


2.效率问题


  inline函数同#define宏定义一样,都是以函数本体做替换,这样做可能增加你的目标码(object code),从而可能造成代码膨胀(代码膨胀会导致额外的换页行为,降低指令高速缓存装置的击中率,带来效率损失)。


  如果inline函数本体很小,编译器针对“函数本体”所产生的码可能比针对“函数调用”所产生的码可能更小。


3.是申请,而不是强制,也不一定要带inline


  注意,inline只是对编译器的一个申请,不是强制命令。这项申请可以隐喻提出,也可以明确提出:



class person{
public:
int age() const { return m_age; } //隐喻提出inline申请
private:
int m_age;
};


4.虚函数可以inline吗?


  大部分编译器都回拒绝太复杂的inline函数,而对所有的virtual虚函数都不能申请为inline函数,这是因为虚函数意味着”等待,直到运行期间才能确定调用哪个函数“,而inline意味着”执行前,先将调用动作替换为函数本体“。


5.构造函数和析构函数一般不应该是inline的


  通常在继承类中,即使是空的构造函数和析构函数,也会调用基类的构造函数和析构函数,如果是多重继承的话代码就会更加复杂。这样如果再把它设为inline函数的话,出现的地方都回替换函数本体,那代码量务必会增加的。


6.templates函数不一定要inline


  templates通常放在头文件中,编译器将它具现化才能知道函数本体的内容。inline需要成本,所以要多加考虑,否则可能导致代码膨胀。


7.程序升级与inline函数


  inline函数无法随程序库的升级而升级,故需要升级的函数不要采用inline函数。


  假如f是一个inline函数,这时如果把f编进程序中,一旦程序决定修改f函数,所有用到f的客户端程序都必须重新编译,这往往是不被接受的。如果是非Inline函数,一旦它有修改升级,程序只需要编译这部分重新连接就好。


 


 


降低文件间的编译依存关系




 


  C++没有把接口从实现中分离出来,为了实现接口与实现的分离,要使用声明式,不要使用定义式。基于此构想的两个手段是handle classes和interface classes。



int main()
{
int x;
Person p(
params);
}


  当编译器看到x的定义式,它知道必须分配多少内存才能够容下一个int。但当编议器看到p的定义式,如何知道一个person有多大?唯一的办法就是询问class的定义式。然而如果class定义式不列出实现的细节,该怎么办?



int main ()
{
int x;
Person
*p;
}


  只定义一个指向Person对象的指针。这里将不需要class的定义式,如果class Person的任何修改都不需要从新编译这个函数文件。


  也就是说,通过声明的依赖性替代定义的依赖性,来实现接口与实现的分离。


 


所以需要注意


如果使用object reference或object pointers能完成的任务,就不要使用object。references 和pointers只依靠类型声明式,但object就要依靠类型的定义式了。


  如果可以,尽量以class声明式替换class定义式。


 


不知道从何时开始,在这里记笔记已经成为了一个习惯,不记下来总觉得就忘记了


 


 


 


 

本文链接

分享到:
评论

相关推荐

    effective c++读书笔记

    《Effective C++》是一本由Scott Meyers所著的关于C++编程的书籍,该书广泛被认为是对C++程序员提高编程水平和解决实际问题提供了极好的指导。从给出的部分内容来看,读书笔记主要聚焦于以下几个知识点: 1. C++...

    effective C++读书笔记

    Effective C++读书笔记 ...本文总结了Effective C++读书笔记,涵盖了C++的四个主要次语言、高效编程守则、预处理过程、编译过程、模板编程和STL等多方面的内容,为读者提供了一个系统化的C++知识体系。

    Effective C++学习笔记

    Effective C++是一本深入探讨C++编程实践的书籍,它提供了许多提高代码质量和效率的建议。以下是基于标题、描述和部分内容的关键知识点: 1. **虚函数的声明与使用**: - 在C++中,虚函数是实现多态性的关键。它们...

    Effective Modern C++学习笔记

    《Effective Modern C++:改善C++11和C++14的42个具体做法(影印版)(英文版)》中包括以下主题:剖析花括号初始化、noexcept规范、完美转发、智能指针make函数的优缺点;讲解std∷move,std∷forward,rvalue引用和全局...

    effective C++ 读书笔记

    effective C++ 很好 很不错 最好的C++进阶资料

    effective C++ 读书笔记 PPT

    摘录了《Effective C++》 (Scott Meyers 著)中有参考价值的编写代码建议,方面阅读

    Effective C++学习笔记.doc

    自己整理的侯捷版本<<Effective C++ 改善程序与设计的55个具体做法>> 学习笔记.

    Effective C++ More effective C++ 中文版 .chm .rar

    《Effective C++》和《More Effective C++》是两本非常经典的C++编程指南,由Scott Meyers撰写,旨在帮助开发者提升C++编程技巧和理解深度。这两本书中包含了一系列的编程实践和建议,旨在让程序员写出更高效、更...

    Effective C++ 中文带目录

    《Effective C++》第三版由Scott Meyers所著,是一本经典的C++编程书籍。本书不仅深入探讨了C++语言的高级特性,也提出了一系列编程实践中的最佳实践和技巧。侯捷老师翻译的中文版,使更多的中文读者能够学习和掌握...

    effective c++和more effective c++

    《Effective C++》和《More Effective C++》是C++编程领域中的两部经典之作,由Scott Meyers撰写。这两本书深入浅出地探讨了如何更有效地利用C++语言特性,提升代码质量和效率,是每一位C++程序员必备的参考书籍。 ...

    effective c++笔记1

    本笔记总结了Effective C++的第1到第11条款,涵盖了C++语言的多个方面,包括构造函数、拷贝构造函数、拷贝赋值函数、const关键字、enum、inline函数、定义域、static变量、初始化、编译器生成的函数、拷贝控制、多态...

    Effective C++第三版中文版高清版侯捷 译

    《Effective C++》是C++编程领域的一本经典著作,由Scott Meyers撰写,侯捷翻译为中文版。这本书的第三版对原有的内容进行了更新,以适应C++语言的最新发展,包括C++11、C++14以及C++17等标准的新特性。在阅读这本书...

    Effective C++ 中文版

    条款31:将文件间的编译依存关系降至最低 6.继承与面向对象设计 条款32:确定你的public继承塑模出is-a关系 条款33:避免遮掩继承而来的名称 条款34:区分接口继承和实现继承 条款35:考虚virtual函数以外的...

    Effective C++中文版第三版 高清PDF带目录

    为了满足您的需求,本回答将基于《Effective C++》这一经典书籍的主要知识点进行阐述。 ### 《Effective C++》中文版第三版的知识点 #### 一、引言 《Effective C++》是一本经典的C++编程指导书籍,由Scott ...

    Effective C++第三版及详细笔记

    内容简介:有人说C++程序员可以分为两类,读过Effective C++的和没读过的。当您读过《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)(双色)》之后,就获得了迅速提升自己C++功力的一个契机。

    essential C++ & effective C++

    在阅读这两本书时,读者将了解到C++的内存模型和生命周期管理,包括栈和堆的区别,以及智能指针的使用。同时,还会学习到如何利用C++的异常处理机制来编写健壮的代码,以及如何通过封装和抽象来降低代码复杂性。此外...

    Effective C++中文第3版.pdf 带目录书签 清晰版

    《Effective C++中文第3版》是一本由Scott Meyers所著的经典著作,该书深入浅出地介绍了C++编程语言的最佳实践与设计原则。它不仅适合初学者掌握C++的核心概念,也是资深程序员提高代码质量和性能的宝典。下面,我们...

    Effective C++笔记1

    本笔记概括了 Effective C++ 中的四十个规则的第一个部分,涵盖了 C++ 语言的基本概念、const 的使用、inline 函数的应用、对象的初始化等方面。 规则 1:将 C++ 视为语言联合体 --------------------------- C++ ...

Global site tag (gtag.js) - Google Analytics