inline关键字的作用

一、在C&C++中,inline关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。

如下面一宏定义表达式:

#define express(v1,v2) (v1+v2)*(v1-v2)

取代这种形式的原因如下:

1. C中使用define这种形式宏定义的原因是因为,C语言是一个效率很高的语言,这种宏定义在形式及使用上像一个函数,但它使用预处理器实现,没有了参数压栈,代码生成等一系列的操作,因此,效率很高,这是它在C中被使用的一个主要原因。

2. 这种宏定义在形式上类似于一个函数,但在使用它时,仅仅只是做预处理器符号表中的简单替换,因此它不能进行参数有效性的检测,也就不能享受C++编译器严格类型检查的好处,另外它的返回值也不能被强制转换为可转换的合适的类型,这样,它的使用就存在着一系列的隐患和局限性。

3. 在C++中引入了类及类的访问控制,这样,如果一个操作或者说一个表达式涉及到类的保护成员或私有成员,你就不可能使用这种宏定义来实现(因为无法将this指针放在合适的位置)。

4. inline 推出的目的,也正是为了取代这种表达式形式的宏定义,它消除了宏定义的缺点,同时又很好地继承了宏定义的优点。

原文地址:https://www.cnblogs.com/zhangnianyong/p/9097912.html

时间: 2024-10-06 22:58:03

inline关键字的作用的相关文章

static inline volatile的作用

1.static (1)先来介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性.为理解这句话,我举例来说明.我们要同时编译两个源文件,一个是a.c,另一个是main.c. 下面是a.c的内容 [cpp] view plaincopy char a = 'A'; // global variable void msg() { printf("Hello/n"); } 下面是main.c的内容 [cpp] view p

C语言的inline关键字

一直以来我就认为inline关键字是C++中的.今天我看到一篇讲关于C语言的inline关键字的.呵呵... 原来是我弄错了.看来以后定义一些宏命令完全可以用这样的一些inline函数来代替了.以下是我从网上搜集来的知识点(来 源:http://superding.spaces.live.com/Blog/cns!89E842A8485366C7!1137.entry) 本文介绍了GCC和C99标准中inline使用上的不同之处.inline属性在使用的时候,要注意以下两点: inline关键字

c++中static和inline关键字

一.static变量和static函数 static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别? 答: 1) 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量.全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式. 这两者在存储方式上并无不同.这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的. 而静态全局变量

c++和c语言的inline关键字对比

其实我一直比较喜欢C语言,对C++的了解少之又少,但是最近由于需要翻看起C++的书籍来.在C++沉思录当中,看到了这样一句话:“我还指出,由于这些成员函数定义在Trace类自身的定义内,C++会内联扩展它们,所以就使得即使在不进行跟踪的情况下,在程序中保留Trace对象也不必付出许多代价.——Koenig,<C++沉思录中文版>,page2”.K先生所举例的代码如下所示: 1 class 2 Trace{ 3 public : 4 Trace(){noisy = 0;} 5 void prin

C++ | inline关键字和内联函数

inline关键字 作用:避免频繁调用函数对栈内存重复开辟所带来的消耗. 在 c/c++ 中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了 inline 修饰符,表示为内联函数. 栈空间就是指放置程序的局部数据(也就是函数内数据)的内存空间. 在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足而导致程序出错的问题,如,函数的死循环递归调用的最终结果就是导致栈内存空间枯竭. 内联函数 C++内联函数是通常与类一起使用.如果一个函数是内联的,那么在编译时,编

GCC和C99标准中inline使用上的不同之处。inline属性在使用的时候,要注意以下两点:inline关键字在G

本文介绍了GCC和C99标准中inline使用上的不同之处.inline属性在使用的时候,要注意以下两点:inline关键字在GCC参考文档中仅有对其使用在函数定义(Definition)上的描述,而没有提到其是否能用于函数声明(Declare). 从 inline的作用来看,其放置于函数声明中应当也是毫无作用的:inline只会影响函数在translation unit(可以简单理解为C源码文件)内的编译行为,只要超出了这个范围inline属性就没有任何作用了.所以inline关键字不应该出现

Java对象表示方式1:序列化、反序列化和transient关键字的作用

http://www.cnblogs.com/xrq730/p/4821958.html 平时我们在Java内存中的对象,是无 法进行IO操作或者网络通信的,因为在进行IO操作或者网络通信的时候,人家根本不知道内存中的对象是个什么东西,因此必须将对象以某种方式表示出来,即 存储对象中的状态.一个Java对象的表示有各种各样的方式,Java本身也提供给了用户一种表示对象的方式,那就是序列化.换句话说,序列化只是表示对 象的一种方式而已.OK,有了序列化,那么必然有反序列化,我们先看一下序列化.反序

java4android (static关键字的作用)

静态成员变量的语法特点 (static String name)    既可以用类来调用,也可以用对象来调用. 静态成员变量不是对象层次的变量,是类层次的.这个类产生的所有对象,都是使用此静态成员变量. 静态函数的语法特点 ( static void talk()  ) 既可以用类来直接调用,也可以用对象来调用 静态函数中不能引用非静态的成员变量 静态代码块的语法特点( static {code}  ) 没有名字, 静态代码块在装载这个类时就被调用,主要作用是给一些静态变量赋初始值. java4

return 关键字的作用

注意: 如果一个函数的返回值类型是具体的数据类型,那么该函数就必须要保证在任意情况下都保证有返回值.(除了返回值类型是void以外) return 关键字的作用: 1. 返回数据给函数的调用者. 2. 函数一旦执行到了return关键字,那么该函数马上结束. (能结束一个函数) 注意:一个函数的返回值类型 是void,那么也可以出现return关键字,但是return关键字的后面不能有数据. break关键字与return关键字的区别: 1.break关键字是结束一个循环. 2. return关