加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

C++ inline内联函数说明大全

发布时间:2021-05-26 10:09:11 所属栏目:编程 来源:互联网
导读:假如函数体代码较量多,必要较长的执行时刻,那么函数挪用机制占用的时刻可以忽略;假如函数只有一两条语句,那么大部门的时刻城市耗费在函数挪用机制上,这种时
假如函数体代码较量多,必要较长的执行时刻,那么函数挪用机制占用的时刻可以忽略;假如函数只有一两条语句,那么大部门的时刻城市耗费在函数挪用机制上,这种时刻开销就就不容忽视。

为了消除函数挪用的时空开销,C++ 提供一种进步服从的要领,即在编译时将函数挪用处用函数体替代,相同于C说话中的宏睁开。这种在函数挪用处直接嵌入函数体的函数称为内联函数(Inline Function),又称内嵌函数可能内置函数。

指定内联函数的要领很简朴,只必要在函数界说处增进 inline 要害字。请看下面的例子:

#include <iostream>

using namespace std;

 

//内联函数,互换两个数的值

inline void swap(int *a, int *b){

    int temp;

    temp = *a;

    *a = *b;

    *b = temp;

}

 

int main(){

int m, n;

cin>>m>>n;

cout<<m<<", "<<n<<endl;

swap(&m, &n);

cout<<m<<", "<<n<<endl;

 

return 0;

}

运行功效: 45 99↙ 45, 99 99, 45 留意,要在函数界说处添加 inline 要害字,在函数声明处添加 inline 要害字固然没有错,但这种做法是无效的,编译器会忽略函数声明处的 inline 要害字。 当编译器碰着函数挪用swap(&m, &n)时,会用 swap() 函数的代码替代swap(&m, &n),同时用实参取代形参。这样,措施第 16 行就被置换成:

int temp;

temp = *(&m);

*(&m) = *(&n);

*(&n) = temp;

编译器也许会将 *(&m)、*(&n) 别离优化为 m、n。 当函数较量伟大时,函数挪用的时空开销可以忽略,大部门的 CPU 时刻城市耗费在执行函数体代码上,以是我们一样平常是将很是短小的函数声明为内联函数。 因为内联函数较量短小,我们凡是的做法是省略函数原型,将整个函数界说(包罗函数头和函数体)放在本应该提供函数原型的处所。下面的例子是一个后面课本,这样的写法是不被保举的:

#include <iostream>

using namespace std;

 

//声明内联函数

void swap1(int *a, int *b); //也可以添加inline,但编译器会忽略

 

int main(){

int m, n;

cin>>m>>n;

cout<<m<<", "<<n<<endl;

swap1(&m, &n);

cout<<m<<", "<<n<<endl;

 

return 0;

}

 

//界说内联函数

inline void swap1(int *a, int *b){

int temp;

temp = *a;

*a = *b;

*b = temp;

}

行使内联函数的弱点也长短常明明的,编译后的措施会存在多份沟通的函数拷贝,假如被声明为内联函数的函数体很是大,那么编译后的措施体积也将会变得很大,以是再次夸大,一样平常只将那些短小的、频仍挪用的函数声明为内联函数。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读