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

C++ 内联函数 inline关键字的更多相关文章

  1. (转载)内联函数inline和宏定义

    (转载)http://blog.csdn.net/chdhust/article/details/8036233 内联函数inline和宏定义   内联函数的优越性: 一:inline定义的类的内联函 ...

  2. 内联函数inline的用法

    一.什么是内联函数 在C语言中,如果一些函数被频繁调用,不断地有函数入栈,即函数栈,会造成栈空间或栈内存的大量消耗.为了解决这个问题,特别的引入了inline修饰符,表示为内联函数.  栈空间就是指放 ...

  3. 【转】ios内联函数 inline

    ios内联函数 inline 缘由 由于在学习使用UIScrollVew开发的过程中,碰到下面这个属性(设置内边距): @property(nonatomic) UIEdgeInsets scroll ...

  4. 07 c++中的内联函数inline

    文章链接: 问题描述:类中成员函数缺省默认是内联的,如果在类定义时就在类内给出函数定义,那当然最好.如果在类中未给出成员函数定义,而又想内联该函数的话,那在类外要加上 inline,否则就认为不是内联 ...

  5. 《挑战30天C++入门极限》新手入门:关于C++中的内联函数(inline)

        新手入门:关于C++中的内联函数(inline) 在c++中,为了解决一些频繁调用的小函数大量消耗栈空间或者是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数. 可能说到这里,很 ...

  6. iOS OC内联函数 inline的详解

    inline 在iOS中的一些框架中,static inline是经常出现的关键字组合. static自不用多说,表示在当前文件中应用,如 static A, 在其它文件中也可以出现static A. ...

  7. 内联函数 inline

    (一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联. inline int min(int first, int ...

  8. 从零开始学C++之从C到C++(二):引用、内联函数inline、四种类型转换运算符

    一.引用 (1).引用是给一个变量起别名 定义引用的一般格式:类型  &引用名 = 变量名: 例如:int a=1; int  &b=a;// b是a的别名,因此a和b是同一个单元 注 ...

  9. C++ 内联函数inline

    http://blog.csdn.net/u011327981/article/details/50601800 1.  内联函数 在C++中我们通常定义以下函数来求两个整数的最大值: 复制代码 代码 ...

随机推荐

  1. [LOJ3109][TJOI2019]甲苯先生的线段树:DP

    分析 首先,请允许我 orz HN队长zsy.链接 我们发现树上的链有两种类,一类是直上直下的,一类不是直上直下的(废话).并且,如果我们确定了左侧和右侧的链的长度和整条链上所有节点的编号之和,那么这 ...

  2. Apicloud_(项目)网上书城01_前端搭建

    [本文皆在记录自己开发Apicloud项目过程,不具备教学水平性文章] 参考书籍<30天App开发从0到1> Apicloud_(项目)网上书城01_前端页面开发 传送门 Apicloud ...

  3. R_Studio(cart算法决策树)对book3.csv数据用测试集进行测试并评估模型

    对book3.csv数据集,实现如下功能: (1)创建训练集.测试集 (2)用rpart包创建关于类别的cart算法的决策树 (3)用测试集进行测试,并评估模型 book3.csv数据集 setwd( ...

  4. JS框架_(JQuery.js)夜晚天空满天星星闪烁动画

    百度云盘 传送门 密码:xftr 满天星星闪烁动画效果: (可用星空动画来作为页面背景,白色文字改为文章或者其他的O(∩_∩)O) <!doctype html> <html> ...

  5. Thrift支持的基本数据类型

    'bool' | 'byte' | 'i8' | 'i16' | 'i32' | 'i64' | 'double' | 'string' | 'binary' | 'slist'(deprecated ...

  6. 关于varchar的总结

    摘自:https://www.jianshu.com/p/c3e188440c67 大家都知道用 varchar 比用 char 类型更省空间(不过性能略有下降,char查询更快),相对于定长的 ch ...

  7. spark MLlib 概念 6:ALS(Alternating Least Squares) or (ALS-WR)

    Large-scale Parallel Collaborative Filtering for the Netflix Prize http://www.hpl.hp.com/personal/Ro ...

  8. Singletom 单例

    class Singletom { //最差写法.构造方法是public的,有可能会被new出多个,那就不是单例了. public Singletom(){ } public static Singl ...

  9. 托管C++中System::String^ 转换为 char*

    https://docs.microsoft.com/en-us/cpp/dotnet/how-to-convert-system-string-to-standard-string?view=vs- ...

  10. AS之Lint 工具

    AndroidStudio内置的Lint工具,对app中的代码规范带来了极大的方便.对内存泄漏.代码冗余.代码安全.国际化.代码规范等很多方面都能检测,是一款非常强大的工具! 使用: 在AS--> ...