【C++知否】 内联函数

  1. C++ 内联函数是通常与类一起使用。如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方。
  2. 对内联函数进行任何修改,都需要重新编译函数的所有客户端。因为编译器需要重新更换一次所有的代码,否则将会继续使用旧的函数。
  3. 如果想把一个函数定义为内联函数,则需要在函数名前面放置关键字inline,在调用函数之前需要对函数进行定义。如果已定义的函数多于一行,编译器会忽略 inline 限定符
  4. 在类定义中的定义的函数都是内联函数,即使没有使用inline说明符。
  5. 内联函数没有普通函数调用时的额外开销(压栈,跳转,返回)。

笔记:
1)引入内联函数的目的是为了解决程序中函数调用的效率问题,也就是说,内联函数在编译时进行替换,而对于其他函数,是在运行时才被替换。【空间代价换时间

需要注意:
• 在内联函数内不允许使用循环语句和开关语句
• 内联函数的定义必须出现在内联函数第一次调用之前;
• 类结构中所在的类说明内部定义的函数是内联函数。

2)有些函数即使声明为内联的也不一定会被编译器内联, 这点很重要;

比如虚函数和递归函数就不会被正常内联. 通常, 递归函数不应该声明成内联函数.(递归调用堆栈的展开并不像循环那么简单, 比如递归层数在编译时可能是未知的, 大多数编译器都不支持内联递归函数).
虚函数内联的主要原因则是想把它的函数体放在类定义内, 为了图个方便, 抑或是当作文档描述其行为, 比如精短的存取函数.

3)内联函数由编译器处理,直接将编译后的函数体插入调用的地方;
宏代码片段由预处理器处理,进行简单的文本替换,没有任何编译过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: C++内联函数和宏函数都可以用来提高代码的运行速度,但它们在实现方式和功能上有一些区别。内联函数在编译时展开,而宏函数在预编译时展开。内联函数会被直接嵌入到目标代码,而宏函数只是简单地进行替换。内联函数具有型检测、语法判断等功能,而宏函数没有这些功能。此外,内联函数满足函数的性质,比如有返回值、参数列表等,而宏函数没有这些限制。内联函数可以进行调试,而宏函数不可以。另外,宏函数不能访问对象的私有成员,但是定义内的内联函数可以访问。\[3\]因此,内联函数相对于宏函数来说更加安全和灵活,可以更好地解决函数调用开销的问题。 #### 引用[.reference_title] - *1* *2* [C++内联函数与宏函数](https://blog.csdn.net/suren_jun/article/details/127243191)[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,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [C++:宏函数内联函数(一看就明了)](https://blog.csdn.net/qq_44851228/article/details/108742194)[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,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值