--------------------------------------------------------------------
五、内联方法
C++中提供这样一种能力,函数或者方法的调用可以不以生成代码的方法实现,就像调用独立的代码块,编译器会将方法体或者函数体直接插入到调用方法或者函数的位置,俗称函数体替换,就像我们的宏函数一样。这个过程成为内联。具有这一行为的函数或方法成为内联方法或函数。内联比使用#define宏要安全。具体实现是在方法或者函数定义前使用inline关键字将它们指定为内联的。例如:
inline double MyClass::get_value() const
{
num_accesses++;
return value;
}
inline string MyClass::get_string() const
{
num_accesses++;
return string_;
}这样编译器就可选择用实际的方法体替换get_value以及get_string的调用,而不是生成代码通过函数调用。
值得注意的问题是:如果没有看到函数的定义,编译器怎么替换函数体?因此编写内联函数或者方法时,应该将定义与原型一起放在头文件中。
C++提供另外一种声明内联方法的语法,而无需使用inline关键字,而是直接将方法定义放在类的定义中。比如:
class MyClass()
{
public:
//......
double get_value() const{ num_access++;return value_;}
string get_string() const{ num_access++;return string_;}
//......
};内联方法的应用受限,编译器只会内联最简单的方法以及函数,如果将编译器不想内联的方法定义为内联,编译器会自动忽略,其次,内联使得代码膨胀,在每个调用的地方都会重新生成方法体,这会增加可执行程序的大小。