标签:效率 应用 声明 col turn vat 操作 内存 调用
【题目2-22】为什么要引入内联函数?
引入内联函数的主要目的是,用它替代C语言中表达式形式的宏定义来解决程序中函数调用的效率用题。C语言的宏定义在形式及使用上像一个函数,但它使用预处理器实现,没有了参数压栈,代码生成等乙烯利从操作,因此效率很高。但是在用时,仅仅只是做预处理符号表中的简单替换,因此宏定义不能进行参数有效性的检,也就不能销售C++编译器严格类型检查的好处。另外,宏定义的返回值不能被强制转化为合适类,这样,宏定义的使用就存在着一系列的隐患和局限性。
另外,在C++中引入了类及类型的访问限制,这样,如果一个操作或者说一个表达式涉及类的保护成员或私有成员,你就不可能使用这种宏定义来实现(因为无法将this指针放在合适的位置)。inline推出的目的就是为了取代这种表达式的宏定义,消除它的缺点同时又很好地继承了它的优点。
【题目2-23】为什么 inline 能很好地取代表达式形式的预定义
【题目2-24】说明内联函数使用的场合
使用 inline 函数可以完全取代表达式形式的宏定义
内联函数在C++类中应用最广的,应该是用定义存取函数。我们定义了类中一般会把数据成员定义成私有的或者保护的,这样,外界就不能直接读写我们类成员的数据。对于私有或者保护成员的读写就必须使用成员接口函数来进行。如果我们把这这些读写成员函数定义成内联函数的话,将会获得比较好的效率。如
1 class A{ 2 private: 3 int nTest; 4 public: 5 int readTest(){return nTest;} 6 void setTest(int i); 7 }; 8 inline void A::setTest(int i){ 9 nTest = i; 10 }
类A的成员函数 readTest() 和 setTest() 都是 inline 函数
【题目2-25】为什么不把所有的函数都定义成内联函数
内联是以代码膨胀(复制)为代价的,仅仅省去了函数调用的开销,从而提高函数的执行效率。如果执行函数体内代码的时间相比于函数调用的开销较大,那么效率的收获会很少。另一个方面,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。以下情况不宜使用内联
注意:一个好的编译器将会更具函数的定义体,自动地取消不值得的内联 (这说明了 inline 不应该出现在函数的声明中)。
【题目2-26】内联函数与宏又什么区别?
标签:效率 应用 声明 col turn vat 操作 内存 调用
原文地址:https://www.cnblogs.com/jg01/p/12464755.html