首页 > 代码库 > C++学习之路--(1.回顾类)

C++学习之路--(1.回顾类)

一.内联函数

1.在类声明内定义内联函数

2.内联函数

 在C++中,用户可以创建实际上不调用的短函数,他们的代码在每次调用的程序行里得到扩展。这个过程类似于使用类似函数的宏。为使一个函数在程序行进行代码扩展而不被调用,只要在函数前面加上关键字inline即可。

 例如,在下面的程序,函数max()在行内扩展而不被调用:

#include <iostream>
using namespace std;
inline int max(int a, int b)
{
    return a>b?a:b;
}
int main()
{
    cout<<max(10,20);
    cout<<" "<<max(99,88);
}

  上面的程序等价于下面的程序:

#include <iostream>
using namespace std;
int main()
{
    cout<<(10>20?10:20);
    cout<<" "<<(99>88>99:88);
}

  内联函数是C++的一个重要补充的原因是,他们能使程序员写出非常有效的代码。因为类一般要求几个经常被执行的接口函数,因此,这些函数的效率在C++中是非常重要的。我们知道,每次调用函数时,变元要进栈,各种寄存器内容要保存;函数返回时,又要恢复他们的内容。问题是这些指令要占用时间。但是,如果函数在行内扩展,上述那些操作就不存在了。当然,虽然函数行内扩展能产生较快的速度,但由于重复编码会产生较长的代码,因此最好只内联那些能明显影响程序性能的函数。

  inline对编译器是一种请求,而不是命令。编译器可以选择忽略它。还有,一些编译器不能内联所有类型的函数。例如,通常编译器不能内联递归函数。必须查阅自己的编译器用户手册以了解对内联的限制。如果一个函数不能被内联,它就被当作一个正常的函数调用。

 inline关键字不是C++的 C子集 的一部分,因此,C89没有定义它,然而,C99中增加了它。

 内联函数可以是类的成员。

class myclass{
    int a,b;
public:
    void init(int i,int j);
    void shou();
};
inline void myclass::init(int i,int j)
{
    a = i;
    b = j;
}
inline void myclass::show()
{
    cout<<a<<" "<<b<<"\n";
}

  在类声明内定义内联函数

 在类声明内(大括号之内)定义内联函数是可能的。如果一个函数是在类声明内定义的,它将自动的转换成内联函数(如果可能的话)。没有必要(但不是错误)在函数声明的前面再加上关键字inline。

class myclass{
    int a,b;
public:
    //automatic inline
    void init(int i, int j){a=i;b=j;}
    void show(){cout<<a<<" "<<b<<"\n";}
}

  构造函数和析构函数也可以是内联的。


转自:http://zhidao.baidu.com/link?url=C_svpMOzAT0WuFt8ZuXfio6zR6tfU958uG-7R7TLvgv4bIEKEMWgG0lDv05sb2uVxIjmHY3Zy1DA1hm3FGBeGHXphl6zjVvPBdClwtYx39W


本文出自 “松鼠” 博客,请务必保留此出处http://apinetree.blog.51cto.com/714152/1599464

C++学习之路--(1.回顾类)