C++内联函数

简介: C++内联函数

内联函数概念

以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,内联函数提升程序运行的效率。

以下是没有使用内联函数的汇编代码:

如果在上述函数前增加inline关键字将其改成内联函数,在编译期间编译器会用函数体替换函数的调用。

以下是使用了内联函数的汇编代码:


内联函数特性

  1. inline是一种以空间换时间的做法,省去调用函数额开销。所以代码很长或者有循环/递归的函数不适宜使用作为内联函数。
  2. inline对于编译器而言只是一个建议,编译器会自动优化,如果定义为inline的函数体内有循环/递归等等,编译器优化时会忽略掉内联。
  3. inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址了,链接就会找不到。

   例如:

// F.h
#include <iostream>
using namespace std;
inline void f(int i);
// F.cpp
#include "F.h"
void f(int i)
{
  cout << i << endl;
}
// main.cpp
#include "F.h"
int main()
{
  f(10);
  return 0;
}
// 链接错误:main.obj : error LNK2019: 无法解析的外部符号 "void __cdecl f(int)" (?f@@YAXH@Z),该符号在函数 _main 中被引用



目录
相关文章
|
21天前
|
存储 安全 编译器
【C++专栏】C++入门 | 函数重载、引用、内联函数
【C++专栏】C++入门 | 函数重载、引用、内联函数
27 0
|
2月前
|
安全 编译器 Linux
【C++练级之路】【Lv.1】C++,启动!(命名空间,缺省参数,函数重载,引用,内联函数,auto,范围for,nullptr)
【C++练级之路】【Lv.1】C++,启动!(命名空间,缺省参数,函数重载,引用,内联函数,auto,范围for,nullptr)
|
2天前
|
安全 编译器 程序员
【C++入门】内联函数、auto与基于范围的for循环
【C++入门】内联函数、auto与基于范围的for循环
|
15天前
|
存储 安全 编译器
【C++成长记】C++入门 |函数重载、引用、内联函数
【C++成长记】C++入门 |函数重载、引用、内联函数
|
22天前
|
存储 编译器 Linux
【C++】C++入门第二课(函数重载 | 引用 | 内联函数 | auto关键字 | 指针空值nullptr)
【C++】C++入门第二课(函数重载 | 引用 | 内联函数 | auto关键字 | 指针空值nullptr)
|
24天前
|
存储 编译器 C语言
我的C++奇迹之旅:内联函数和auto关键推导和指针空值
我的C++奇迹之旅:内联函数和auto关键推导和指针空值
|
2月前
|
编译器 C语言 C++
【C++】内联函数
【C++】内联函数
23 1
|
5月前
|
存储 安全 编译器
【C++】内联函数、auto关键字、基于范围的for循环、指针空值nullptr
【C++】内联函数、auto关键字、基于范围的for循环、指针空值nullptr
38 0
|
2月前
|
存储 安全 编译器
【c++入门】引用,内联函数,auto
朋友们大家好,本节我们来到c++中一个重要的部分:引用
【c++入门】引用,内联函数,auto
|
2月前
|
编解码 编译器 API
【C++ 内联函数和库】了解函数导出至库的原理以及其中内联函数的处理
【C++ 内联函数和库】了解函数导出至库的原理以及其中内联函数的处理
39 0