【C++】深入理解“内联与宏”

举报
王博Kings 发表于 2020/12/29 23:16:04 2020/12/29
2.5k+ 0 0
【摘要】 内联函数 内联代码,程序无需跳到另一个位置执行代码,再跳回来。因此,内联函数运行速度比常规函数稍快,但代价是需要占用更多内存。 所以应该有选择性的使用内联函数,如果函数执行代码的时间比处理函数调用的 时间长,则即使使用内联函数,节省也没啥明显改进,而如果代码执行时间很短,则内联函数调用就可以节省大部分调用所占的时间。                           ...

内联函数

内联代码,程序无需跳到另一个位置执行代码,再跳回来。因此,内联函数运行速度比常规函数稍快,但代价是需要占用更多内存。

所以应该有选择性的使用内联函数,如果函数执行代码的时间比处理函数调用的 时间长,则即使使用内联函数,节省也没啥明显改进,而如果代码执行时间很短,则内联函数调用就可以节省大部分调用所占的时间。

                                            

如何使用?

  • 在函数声明前加上关键字  inline
  • 在函数定义前加上关键字  inline

然而

程序员要求使用内联函数是,编译器不一定会满足这种要求。它很可能认为函数过大或者认为调用了自己(不能递归!),  而有的是编译器就没有这个功能

那么宏和内联有什么区别呢?

inline工具是C++新增的特性

C语言使用预处理器语句#define来提供宏--内联函数的原始实现

举例子:

#define  square(x)  x*x

宏并不是传递参数,而是传递文本替换,x仅仅是“参数”的符号标记

a=square(5.0);     //  替换  a=5.0*5.0;

b=square(4.5+7.5);         // 替换  b = 4.5+7.5 * 4.5 +7.5 ;

c=square(C++);               //替换   c = C++*C++ ; 

如果确实想使用这个宏?怎么办?

#define  square(x)   ((x)*(x))

然而,使用新定义后仍在某些情况下存在问题!请大家务必注意!

文章来源: kings.blog.csdn.net,作者:人工智能博士,版权归原作者所有,如需转载,请联系作者。

原文链接:kings.blog.csdn.net/article/details/85840333

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。