C++ inline关键字

1. C的延续

C++是一门承上启下的编程语言,没有写class他就是C语言,这也导致了很多编译器既支持C++也支持C。inline关键字其实更多地出现在C语言当中,因为很多短小的工作函数可以达到快速执行的效果。

将函数声明为inline实际上表示编译器会将inline函数粘贴到调用点处,省去了原本函数查找、调用的时间

2. inline使用原则

要定义一个函数为inline函数,需要满足以下原则:

1)不可包含复杂的结构控制语句,包括循环控制和复杂的条件控制,例如while, switch。

2)不可包含递归函数

inline函数使用无非是平衡“ 函数调用开销 vs  函数执行开销”,所以一个简小的函数要重复调用时,inline函数有一定优势。例如下面的call( )函数。

#include <iostream>

using namespace std;

inline int call( ){

static int ctr =1;

return ctr++;

}

int main(){

for(int i=0; i<500; i++)

cout<<call()<<" "<<endl;

}

执行过程中将call( )函数粘贴到int main()函数中的调用点“ cout<<call( )<<" "<<endl ”处。

很多人可能有疑问,在PC上没有感觉明显速度优势。但是在很多处理器功能很弱的8位、16位的嵌入式系统中,inline函数可以节约非常客观的时间消耗。

3. inline函数定义在头文件

这不是绝对的,如果很多.cpp都需要这个inline函数,那么理应定义在.h中,方便函数引用、拓展。试想,你也不情愿每个函数文件中都用外部函数调用来解决

extern inline int call( );

不同的是,.h中的普通函数只要函数声明即可。对应到Java,可以理解为Java中的抽象方法。如声明头文件Test.h:

#ifndef TEST_H_

#define TEST_H_

bool sort_elem(int &elem);

inline int call( ){

static int ctr =1;

return ctr++;

}

#endif /* TEST_H_ */

inline函数不仅仅要声明,还需要定义。这样才容易被多个文件存取。

————————————————

版权声明:本文为CSDN博主「光膀走天涯」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/zxy1198186906/article/details/82151032

原文地址:https://www.cnblogs.com/mfryf/p/11697020.html

时间: 2024-10-07 17:16:42

C++ inline关键字的相关文章

C语言的inline关键字

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

转: inline关键字使用

1.inline用在函数声明时,还是函数定义时?还是两边都加? 首先,内联函数声明和定义最好在同一个文件中,其它的情况没有实用上的意义. 只要在同一个文件中,声明和定义至少其一加“inline”修饰即可. 2.inline的函数可不可以同时是虚函数? 可以. 因为inline只是给编译器的一种建议,编译器并不保证一定进行内联展开,也并不保证一定不进行内联展开.更详细地讲,假如有10个地方调用了这个函数,并不保证10处都会内联展开或都不会内联展开,完全可能实际上只展开了5处.另外5处没有展开. 因

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

define和inline关键字比较

这里我们学习一下define和inline关键字的用法,以及它们的区别. define:定义预编译时处理的宏,只是简单的字符串替换,无类型检查. inline:1.inline关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义,编译阶段完成.  2.内联函数要做类型安全检查,inline是指嵌入代码,在调用函数的地方不是跳转,而是把代码直接写到那里去,对于短小的函数来说,inline函数可以得到一定效率的提升,和c时代的宏函数相比,inline函数更加安全可靠,这个

inline关键字的作用

一.在C&C++中,inline关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义. 如下面一宏定义表达式: #define express(v1,v2) (v1+v2)*(v1-v2) 取代这种形式的原因如下: 1. C中使用define这种形式宏定义的原因是因为,C语言是一个效率很高的语言,这种宏定义在形式及使用上像一个函数,但它使用预处理器实现,没有了参数压栈,代码生成等一系列的操作,因此,效率很高,这是它在C中被使用的一个主要原因. 2. 这种宏定义在形式上

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关键字不应该出现

C99 inline关键字

C99 inline 一直以来都用C++用得比较多,这个学期做操作系统的课设用回了C,结果一波內联函数居然链接不过去--查了查资料,C99引入的inline和C++的inline语义区别是很大的,我算是踩了这个坑. C++的inline除了建议编译器把函数内容内联以外,主要的作用就是能够让你把一个函数的定义在不同的编译单元里重复,而不会报链接错误.C99的inline则不然,它的语义是: Any function with internal linkage can be an inline fu