博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++内联函数(inline)的工作原理与例子
阅读量:2352 次
发布时间:2019-05-10

本文共 1482 字,大约阅读时间需要 4 分钟。

       内联函数(inline function与一般的函数不同,它不是在调用时发生控制转移,而是在编译阶段将函数体嵌入到每一个调用该函数的语句块中。
内联函数(inline function)
与编译器的工作息息相关
。编译器会将程序中出现内联函数的
调用表达式用内联函数的函数体来替换。
内联函数的优点:
       内联函数是将程序执行转移到被调用函数所存放的内存地址,将函数执行完后,在返回到执行此函数前的地方。这种转移操作需要保护现场、包括进栈等操作,在被调用函数代码执行完后,再恢复现场。但是保护现场和恢复现场需要较大的资源开销。对于一些较小的调用函数来说,若是频繁调用,函数调用过程甚至可能比函数执行过程需要的系统资源更多。所以引入内联函数,可以让程序执行效率更高。
内联函数的缺点:
       如果调用内联函数的地方过多,也可能造成代码膨胀。因为编译器会把内联函数的函数体嵌入到每一个调用了它的地方,重复地嵌入。
以下是几种含有内联函数的情况:
一、
 在类中使用内联函数和不使用内联函数
1、
/***在类里定义的成员函数会被默认的认为是指定为内置函数*/#include 
#include
using namespace std;class Person{public: void display() { cout << "name:" << name << endl; } string name;};int main(int argc, char* argv[]){ Person person; person.name = "Erin"; person.display(); return 0;}
2、
/***类外定义的函数用inline指定为内置函数*/#include 
#include
using namespace std;class Person{public: inline void display(); string name;};inline void Person::display(){ cout << "name:" << name << endl;}int main(int argc, char* argv[]){ Person person; person.name = "Erin"; person.display(); return 0;}
3、
/***无内置函数*既没有在类内定义函数,也没有用inline在类外定义函数*/#include 
#include
using namespace std;class Person{public: void display(); string name;};void Person::display(){ cout << "name:" << name << endl;}int main(int argc, char* argv[]){ Person person; person.name = "Erin"; person.display(); return 0;}
二、普通函数的调用内联函数
 
#include
using namespace std;inline int max(int i, int j, int k) { if (i

转载地址:http://carvb.baihongyu.com/

你可能感兴趣的文章
Spring中BeanFactory和FactoryBean有什么区别?
查看>>
牛年(2021)的KPI
查看>>
快速识别图片类型
查看>>
理解云原生
查看>>
docker常见问题答疑
查看>>
mac最简配置maven
查看>>
虚拟机性能监控与故障处理工具
查看>>
GIT的一些操作
查看>>
ZooKeeper 四字命令
查看>>
Mysql InnoDB锁问题
查看>>
ZooKeeper编程 基础教程
查看>>
Java 集合框架
查看>>
kafka 操作
查看>>
Java 集合框架 算法
查看>>
Java 集合框架 Set实现
查看>>
Java 集合框架 List实现
查看>>
Java 集合框架 Map 实现
查看>>
kafka 简单入门
查看>>
maven常用命令汇总
查看>>
Redis 方案
查看>>