C++代码优化方法总结(二)(1)
C++代码优化方法总结(二) cppbug cpp_bug@hotmail.com
三. 内联函数内联函数既能够去除函数调用所带来的效率负担又能够保留一般函数的优点。然而,内联函数并不是万能药,在一些情况下,它甚至能够降低程序的性能。因此在使用的时候应该慎重。 1.我们先来看看内联函数给我们带来的好处:从一个用户的角度来看,内联函数看起来和普通函数一样,它可以有参数和返回值,也可以有自己的作用域,然而它却不会引入一般函数调用所带来的负担。另外,它可以比宏更安全更容易调试。 当然有一点应该意识到,inline specifier仅仅是对编译器的建议,编译器有权利忽略这个建议。那么编译器是如何决定函数内联与否呢?一般情况下关键性因素包括函数体的大小,是否有局部对象被声明,函数的复杂性等等。 2.那么如果一个函数被声明为inline但是却没有被内联将会发生什么呢?理论上,当编译器拒绝内联一个函数的时候,那个函数会像普通函数一样被对待,但是还会出现一些其他的问题。例如下面这段代码: // filename Time.h#include<ctime>#include<iostream>using namespace std;class Time{public: inline void Show() { for (int i = 0; i<10; i++) cout<<time(0)<<endl;}}; 因为成员函数Time::Show()包括一个局部变量和一个for循环,所以编译器一般拒绝inline,并且把它当作一个普通的成员函数。但是这个包含类声明的头文件会被单独的#include进各个独立的编译单元中: // filename f1.cpp#include "Time.hj"void f1(){ Time t1; t1.Show();}
// filename f2.cpp#include "Time.h"void f2(){ Time t2; t2.Show();}结果编译器为这个程序生成了两个相同成员函数的拷贝:void f1();void f2();int main(){ f1(); f2();