background image

程序的可读性就不要使用初始化列表了,因为编译器对两者产生的汇编代码是相同的。
(4  

) postfix VS prefix 运算符

prefix 运算符++ —

和 比它的 postfix 版本效率更高,因为当 postfix 运算符被使用的时

候,会需要一个临时对象来保存改变以前的值。对于基本类型,编译器会消除这一份额外
的拷贝,但是对于用户定义类型,这似乎是不可能的。因此请你尽可能使用 prefix 运算
符。
三. 内联函数
内联函数既能够去除函数调用所带来的效率负担又能够保留一般函数的优点。然而,内联
函数并不是万能药,在一些情况下,它甚至能够降低程序的性能。因此在使用的时候应该
慎重。
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();