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

最新文章

  1. Resources.Load加载文件返回null的原因
  2. Linux 网络工具之fping
  3. java@ 利用ArrayList实现dijkstra算法以及topological 排序算法(java.util.ArrayList)
  4. 学习笔记-[Maven实战]-第三章:Maven使用入门(2)
  5. Phalcon处理404页面的 Ruter 方法
  6. 正式学习React(五) react-redux源码分析
  7. 关于 vue-cli v2.8.2
  8. 科普:String hashCode 方法为什么选择数字31作为乘子
  9. angular+ionic+cordova(实战项目开发中,持续更新自己学到的和遇到的)
  10. 安卓上用Termux终端模拟器安装MC Forge 1.12.2服务器!
  11. IntelliJ IDEA激活
  12. Web服务器软件 (Tomcat)
  13. Django-rest-framework 接口实现 分页:(Pagination) 解析器(Parser) 渲染器(renderer)
  14. CSS--position:relative和position:absolute
  15. php使用gd库输出中文内容的图片
  16. 洛谷p1067
  17. C# 设置按钮快捷键
  18. 了解MySQL联表查询中的驱动表,优化查询,以小表驱动大表
  19. [转]小心PHP的类定义顺序与继承的问题
  20. URL中#号的含义

热门文章

  1. Selenium 文件下载
  2. pygame的常用模块
  3. SpringMvc 支持一下类型Serlvet 原生的 API 作为目标方法的参数
  4. 浏览器端-W3School-HTML:HTML DOM Anchor 对象
  5. 自定义view防支付成功页面
  6. 在 Android 中如何调用 C 语言?
  7. ControlTemplate in WPF —— DatePicker
  8. (WPF)360安全卫士界面设计
  9. Selenium 2自动化测试实战16(多窗口切换)
  10. Python学习之==&gt;Socket网络编程