C++学习笔记——内联函数和宏定义

内联函数:

在函数定义时使用inline关键字,在函数声明中使用inline是没有效果的。函数的使用者不需要知道函数是否是内联函数,这也是inline关键字不应该出现在函数声明中的原因。

如果在函数声明的同时给出函数的定义,编译器会自动将函数识别为内联函数,但是不应该这样编写代码。

内联函数是怎么工作的呢,在编译阶段,编译器在发现inline关键字时会将函数体保存在函数名所在的符号表内,在程序中调用内联函数的地方,编译器直接在符号表中获取函数名和函数体,并用内联函数的函数体替换掉函数调用,从而节省了运行时调用函数的开销。

在使用内联函数时,要注意内联函数产生的代码膨胀问题。如果一个内联函数的函数体非常庞大,并且在程序各处都会调用这个内联函数,那么代码展开后的内联函数就会内嵌到程冠各处,从而造成程序代码体积极速增长,也就是代码膨胀。因此,在定义一个内联函数时,要确保函数体十分简单。现在的编译器大多数都经过优化,能够判断一个函数是否适合作为内联函数。

内联函数与宏定义的区别:

根本区别:宏定义仅仅是字符串替换,而内联函数是个函数,可以像普通函数一样调试。

内联函数和宏定义的代码展开发生在不同阶段,宏定义的展开是在预处理阶段,而内联函数的展开是在编译阶段,因此许多编译阶段的工作只对内联函数有效,如类型安全检查和自动类型替换。

内联函数作为类的成员函数时,可以访问类的所有成员,this指针也会隐式的正确使用。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值