📜  c++中的内联函数(1)

📅  最后修改于: 2023-12-03 14:39:58.016000             🧑  作者: Mango

C++中的内联函数

在C++中,内联函数(inline function)能够在函数调用处直接将函数体展开执行,而不是跳转到函数体执行。这种机制使函数调用的开销降低,从而提高程序的执行效率。

声明和定义

内联函数的声明和定义需要在函数声明前面加上inline关键字,并将函数体放在头文件中或在函数声明的地方进行定义。

示例:

inline int add(int a, int b) {
    return a + b;
}
使用

内联函数通常用于对循环语句、小型函数等进行优化,使用时需要注意以下几点:

  • 内联函数需要在编译时进行展开,所以编译器会对使用内联函数的地方进行检查,可能会有额外的代码生成,从而带来一定的代码膨胀。
  • 递归函数、循环次数较多的函数、含有复杂控制语句的函数不宜使用内联函数,因为这些函数的代码展开会使程序变得更加臃肿,对程序效率并无帮助。
  • 当内联函数被频繁调用时,由于没有了函数调用的开销,程序的执行效率会有明显的提高。
示例

下面的代码中,add()函数被声明为内联函数,main()函数中重复调用该函数,观察程序的执行效率:

#include <iostream>
#include <chrono>
using namespace std;

inline int add(int a, int b) {
    return a + b;
}

int main() {
    auto start_time = chrono::high_resolution_clock::now();

    int sum = 0;
    for (int i = 0; i < 1000000; i++) {
        sum = add(sum, i);
    }

    auto end_time = chrono::high_resolution_clock::now();
    auto duration = chrono::duration_cast<chrono::microseconds>(end_time - start_time);
    cout << "Sum: " << sum << endl;
    cout << "Time taken by function: " << duration.count() << " microseconds" << endl;
    return 0;
}

在实际测试中,该程序的执行时间比不使用内联函数的程序要快得多。