C++ 内联函数 inline关键字
2024-10-07 02:14:24
inline 关键字主要功能是为了 代替掉 宏代码片段。
在C++中使用关键字inline关键字声明内联函数。
inline int fun(int a,int b)
{
return a < b ? a : b; //如果a<b 成立 a=a 否则a=b
}
#include <stdio.h> #define FUN(a,b) ((a) < (b) ? (a) : (b)) inline int fun(int a,int b)
{
return a < b ? a : b; //如果a<b 成立 a=a 否则a=b
} int main(int argc, char *argv[])
{
int a = ,b=;
int val = FUN(++a,b);
printf("Begin...\n");
printf("val = %d\n",val);
printf("a = %d\n",a);
printf("b = %d\n",b);
printf("End...\n");
return ;
}
如果调用宏FUN int val = FUN(++a,b); 展开就是 int val = ((++a) < (b) ? (++a) : (b)); 这里的Val = 3
而调用 fun 这个函数 int val = 2
从而说明 宏代码块有一个缺点就是宏代码块只是做内容的替换。
C++ 中inline 内联编译的限制:
1、不能存在任何形式的循环语句
2、不能存在过多的条件判断语句
3、函数体不能过于庞大
4、不能对该函数进行取地址操作
5、内联函数声明必须在调用语句之前。
内联函数:
C++编译器可以将一个函数进行内联编译
C++编译器直接将函数体插入函数调用的地方,从而内联函数没有普通函数调用时的额外开销。(压栈、跳转、返回)。
注意:C++编译器不一定满足函数的内联请求,也就是说使用inline 关键字声明内联函数可能会被编译器拒绝。从而建立内联失败
强制内联:
C++编译器提供了 扩展语法,能够对函数进行强制内联
g++ :_attrbute_((always_inline)) 属性
MSVS:_forceinline
最新文章
- Resources.Load加载文件返回null的原因
- Linux 网络工具之fping
- java@ 利用ArrayList实现dijkstra算法以及topological 排序算法(java.util.ArrayList)
- 学习笔记-[Maven实战]-第三章:Maven使用入门(2)
- Phalcon处理404页面的 Ruter 方法
- 正式学习React(五) react-redux源码分析
- 关于 vue-cli v2.8.2
- 科普:String hashCode 方法为什么选择数字31作为乘子
- angular+ionic+cordova(实战项目开发中,持续更新自己学到的和遇到的)
- 安卓上用Termux终端模拟器安装MC Forge 1.12.2服务器!
- IntelliJ IDEA激活
- Web服务器软件 (Tomcat)
- Django-rest-framework 接口实现 分页:(Pagination) 解析器(Parser) 渲染器(renderer)
- CSS--position:relative和position:absolute
- php使用gd库输出中文内容的图片
- 洛谷p1067
- C# 设置按钮快捷键
- 了解MySQL联表查询中的驱动表,优化查询,以小表驱动大表
- [转]小心PHP的类定义顺序与继承的问题
- URL中#号的含义