C++ 内联函数

内联函数是C++的增强特性之一,用来降低程序的运行时间。当内联函数收到编译器的指示时,即可发生内联:编译器将使用函数的定义体来替代函数调用语句,这种替代行为发生在编译阶段而非程序运行阶段。内联函数可减少cpu的系统开销,并且程序的整体速度将加快,但当内联函数很大时,会有相反的作用,因此一般比较小的函数才使用内联函数。本文主要介绍C++ 内联函数。

1、内联函数

C++中一个函数定义为内联函数,则需要在函数名前面放置关键字 inline,在调用函数之前需要对函数进行定义。如果已定义的函数多于一行,编译器会忽略 inline 限定符。

在类定义中的定义的函数都是内联函数,即使没有使用 inline 说明符。

例如,

#include <iostream>
using namespace std;
inline int Max(int x, int y)
{
   return (x > y)? x : y;
}
// 程序的主函数
int main( )
{
   cout << "Max (20,10): " << Max(20,10) << endl;
   cout << "Max (0,200): " << Max(0,200) << endl;
   cout << "Max (100,1010): " << Max(100,1010) << endl;
   return 0;
}

2、内联函数和普通函数区别

不建议滥用内联函数,因为它可能导致代码膨胀。现代编译器会自动优化(如内联),inline 关键字仅起到建议作用。

#include <iostream>
using namespace std;

// 内联函数
inline int addInline(int a, int b) {
    return a + b;
}

// 普通函数
int addNormal(int a, int b) {
    return a + b;
}

int main() {
    int x = 10, y = 20;

    // 使用内联函数
    int resultInline = addInline(x, y);
    cout << "内联函数的结果: " << resultInline << endl;

    // 使用普通函数
    int resultNormal = addNormal(x, y);
    cout << "普通函数的结果: " << resultNormal << endl;

    return 0;
}

1)编译结果不同

内联函数(有时称作在线函数或编译时期展开函数)是一种编程语言结构,用来建议编译器对一些特殊函数进行内联扩展(有时称作在线扩展);也就是说建议编译器将指定的函数体插入并取代每一处调用该函数的地方(上下文)。普通函数则会编译为单独的模块。

2)编译的时间不同

对于基于C的编译系统,内联函数的使用可能大大增加编译时间,因为每个调用该函数的地方都需要替换成函数体,代码量的增加也同时带来了潜在的编译时间的增加。

3)运行的效率不同

使用内联函数时,必须在程序占用空间和程序执行效率之间进行权衡,因为过多的比较复杂的函数进行内联扩展将带来很大的存储资源开支。

3、用于类的成员函数

类的成员函数如果在类定义中实现,则默认是内联函数。

#include <iostream>
using namespace std;

class Circle {
private:
    double radius;

public:
    Circle(double r) : radius(r) {}

    // 默认内联
    double area() {
        return 3.14159 * radius * radius;
    }
};

int main() {
    Circle c(5.0);
    cout << "Circle Area: " << c.area() << endl;
    return 0;
}

推荐阅读
cjavapy编程之路首页