C++之内联函数

C++之内联函数

介绍
内联函数一般在代码中用inline修饰,当一个函数被声明为内联函数,编译器将使用相应的函数代码替换函数调用,程序无序跳到另外一个位置执行代码,运行速度比常规函数快,但是占用了更多的内存,如果程序在10个不同的地方调用同一个内联函数,该程序将包含该函数的10个副本。
和普通函数区别

  1. 就是普通函数声明或者定义前加上inline使其成为内联函数
  2. 普通函数调用:调用指令跳转到被调用函数的入口地址,执行完调用函数,指令还要回到主函数上继续执行后面的代码。所以普通函数代码段只有一份。
  3. 内联函数调用:函数的代码直接放在函数的位置上,没有指令跳转,按照顺序执行的。内联函数是程序调用几次,内联函数的代码就会复制几份放在对应的位置上

成员函数
在类中定义的成员函数默认是内联的,可以显示加上inline,或者不加。
和宏的区别

  1. 内联函数在编译时展开,宏在预编译时展开
  2. 内联函数是直接嵌入到目标程序中,宏是简单的文本替换
  3. 内联函数是一个函数,有类型检测,语法判断,而宏没有

以下情况不宜使用

  1. 函数体内的代码长,将消耗很多内存,因为要创建副本
  2. 函数体内有循环,函数执行时间比函数调用开销大

构造函数、析构函数和虚函数能否声明为内联函数
构造和析构函数:将构造函数和析构函数声明为inline是没有什么意义的,即编译器并不真正对声明为inline的构造和析构函数进行内联操作,因为编译器会在构造和析构函数中添加额外的操作(申请/释放内存,构造/析构对象等),致使构造函数/析构函数并不像看上去的那么精简。其次,class中的函数默认是inline型的,编译器也只是有选择性的inline,将构造函数和析构函数声明为内联函数是没有什么意义的。
虚函数:当是指向派生类的指针(多态性)调用声明为inline的虚函数时,不会内联展开;当是对象本身调用虚函数时,会内联展开,当然前提依然是函数并不复杂的情况下。

参考:<<C++primer plus>>
<<王道程序员求职宝典>>
https://www.cnblogs.com/helloweworld/archive/2013/06/14/3136705.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C++中,使用extern声明可以在一个文件中调用其他文件中定义函数,或者说将该函数的作用域扩展到本文件。extern声明的形式是在函数原型基础上加上关键字extern。在程序中经常需要调用其他文件中的外部函数,为了方便编程,C++允许在声明函数时省略extern关键字。例如,在主文件中可以使用extern声明来调用其他文件中定义函数。\[1\] 举个例子,假设有一个test.cpp文件中定义了一个函数,我们可以在主文件中使用extern声明来调用这个函数。首先,在test.h文件中声明外部函数,然后在test.cpp文件中定义外部函数并进行初始化。最后,在主文件中使用extern关键字来调用外部函数。\[2\] 另外,C++中还有内部函数,也称为静态函数。使用内部函数可以使函数只局限于所在文件,如果在不同的文件中有同名的内部函数,它们互不干扰。通常将只能由同一文件使用的函数和外部变量放在一个文件中,并在它们前面加上static关键字使之局部化,其他文件不能引用这些函数和变量。\[3\] #### 引用[.reference_title] - *1* *3* [简单讲解C++的内部和外部函数以及宏的定义](https://blog.csdn.net/weixin_39663258/article/details/117269869)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [C++声明extern变量和extern函数的用法](https://blog.csdn.net/wenchm/article/details/130765956)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值