inline优于宏定义的地方,及inline不适用的地方
来源:互联网 发布:机加工erp软件下载 编辑:程序博客网 时间:2024/05/16 09:55
一、inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。 表达式形式的宏定义一例: #define ExpressionName(Var1,Var2) ((Var1)+(Var2))*((Var1)-(Var2))为什么要取代这种形式呢,且听我道来: 1. 首先谈一下在C中使用这种形式宏定义的原因,C语言是一个效率很高的语言,这种宏定义在形式及使用上像一个函数,但它使用预处理器实现,没有了参数压栈,代码生成等一系列的操作,因此,效率很高,这是它在C中被使用的一个主要原因。 2. 这种宏定义在形式上类似于一个函数,但在使用它时,仅仅只是做预处理器符号表中的简单替换,因此它不能进行参数有效性的检测,也就不能享受C++编译器严格类型检查的好处,另外它的返回值也不能被强制转换为可转换的合适的类型,这样,它的使用就存在着一系列的隐患和局限性。 3. 在C++中引入了类及类的访问控制,这样,如果一个操作或者说一个表达式涉及到类的保护成员或私有成员,你就不可能使用这种宏定义来实现(因为无法将this指针放在合适的位置)。
4. inline 推出的目的,也正是为了取代这种表达式形式的宏定义,它消除了它的缺点,同时又很好地继承了它的优点。
=====
inline不适用的地方:
函数中的某些语句用法可能会使得内联函数的替换操作无法正常进行,或者不适合进行替换操作。例如使用了可变参数,内存分配函数 malloc(),可变长度数据类型变量,非局部 goto语句以及递归函数。编译时可以使用选项 -Winline 让 gcc 对标志成 inline 但不能被替换的函数给出警告信息以及不能替换的原因。如下面例子,它使用了可变长度数据类型变量作为参数:
inline int func(int *a)
{
int c = 4;
char p[c]; /* 可变长度数组 */
(*a)++;
}
- inline优于宏定义的地方,及inline不适用的地方
- 盘点Win10优于Win8的十个地方
- inline 和 宏定义的区别
- inline 和 宏定义的区别
- inline 和 宏定义的区别
- inline 和 宏定义的区别
- inline 和 宏定义的区别
- 定义变量的地方!
- inline多次定义的用法
- 查询数据库中字段的定义不统一的地方
- 一个宏定义值得注意的地方
- 宏定义要注意的地方
- 宏定义需要注意的地方
- 托管程序优于非托管程序的地方
- C++的函数对象优于函数指针地方
- 直白叙述一下multi interface优于easy interface的地方
- inline 的作用及使用方法
- inline的用法及特点
- android源码浅析--notification
- Hive限制
- Windows8下安装SQL Server 2005无法启动服务
- Hibernate的几个概念
- 后台返回的json对象,前台取值
- inline优于宏定义的地方,及inline不适用的地方
- vim 工具使用和详细配置
- 关于SQL server 内容乱码问题的资料收集
- ABAP 构建一个弹出式窗口,其中包含单选按钮
- Z-Blog的安装及使用(Win XP)
- winform 快捷键 切换tableControl 的tabPage
- ssh ( Secure Shell )学习
- 0008算法笔记——【分治法】循环赛事日程表
- 编写ShellCode