inline(内联函数)学习笔记

1、inline 是一种“用于实现的关键字”,而不是一种“用于声明的关键字”。

(1)错误示范

inline void fun(int a,int b);

void fun(int a,int b)

{

}

(2)正确示范

void fun(int a,int b);

inline void fun(int a,int b)

{

}

2、慎用内联
内联能提高函数的执行效率,为什么不把所有的函数都定义成内联函数?
如果所有的函数都是内联函数,还用得着“内联”这个关键字吗?
内联是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,从而提高函数的
执行效率。如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收
获会很少。另一方面,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,
消耗更多的内存空间。以下情况不宜使用内联:
(1)如果函数体内的代码比较长,使用内联将导致内存消耗代价较高。
(2)如果函数体内出现循环,那么执行函数体内代码的时间要比函数调用的开销大。
类的构造函数和析构函数容易让人误解成使用内联更有效。要当心构造函数和析构
函数可能会隐藏一些行为,如“偷偷地”执行了基类或成员对象的构造函数和析构函数。
所以不要随便地将构造函数和析构函数的定义体放在类声明中。
一个好的编译器将会根据函数的定义体,自动地取消不值得的内联(这进一步说明
了inline 不应该出现在函数的声明中)。

3、内联函数与宏的区别

区别如下:

1)内联在编绎时展开,宏在预编译时展开。

2)编译内联函数可以嵌入到目标代码,宏只是简单文本替换。

3)内联会做类型,语法检查,而宏不具这样功能。

4)宏不是函数,inline函数是函数

5)宏定义小心处理宏参数(一般参数要括号起来),否则易出现二义性,而内联定义不会出现。

时间: 2024-07-30 03:22:06

inline(内联函数)学习笔记的相关文章

Inline 内联函数

Inline函数,即内联函数,它是把函数内部的代码直接插入到调用者代码处的函数,也就是该函数不是通过子函数调用这种常见的方式来实现的,而是直接替换到函数调用处(这点上有点类似#define宏),由此带来的优势就是省去了调用/返回指令,通过避免调用带来的开销(包括函数调用带来的额外的执行周期和堆栈的使用)来提高代码的执行效率,而又同时保留了函数封装形式带来的可读性,很好用吧有木有,下面就让我们看看具体的使用形式: /****************函数声明部分*****************/

c++——inline内联函数

1 inline内联函数 C++中的const常量可以替代宏常数定义,如: const int A = 3; ? #define A 3 C++中是否有解决方案替代宏代码片段呢?(替代宏代码片段就可以避免宏的副作用!) C++中推荐使用内联函数替代宏代码片段 C++中使用inline关键字声明内联函数 内联函数声明时inline关键字必须和函数定义结合在一起,否则编译器会直接忽略内联请求. //宏替换和函数调用区别 #include "iostream" using namespace

(inline)内联函数在IOS开发中的使用

今天在阅读YYKit源码(https://github.com/ibireme/YYKit.git)时发现在YYKitMacro.h组件中大量使用的内联函数,例如此文件中的一个函数 static inline void dispatch_async_on_main_queue(void (^block)()) { if (pthread_main_np()) { block(); } else { dispatch_async(dispatch_get_main_queue(), block);

【转】inline内联函数

技术类笔试题50%都会问宏与inline的区别,自己去找找看? 1)宏替换发生在预编译 2)宏函数(如果可以这么叫的话)替换时不会检查参数,inline函数会检查 3)宏一定会发生替换,inline貌似不是强制的,编译器想不替换也没关系 4)宏替换时存在着一些不可避免的陷阱(参见C Traps and Pitfalls),例如传参时如果传了a++之类的可能会出错,inline就比较安全了. 宏有副作用,比如MAX(x++,y++) inline会不同, 慎用内联内联能提高函数的执行效率,为什么不

inline内联函数

body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;} th{border: 1px solid gray; padding: 4px; background-color: #DDD;} td{border: 1px solid gray; padding: 4px;} tr:nth-child(

C++ inline内联函数

内联函数 函数调用是有时间和空间开销的.程序在执行一个函数之前需要将实参.局部变量.返回地址以及若干寄存器都压入栈中,然后才能执行函数体中的代码:执行完之后,还要将之前压入栈中的数据都出栈,才能接着执行函数调用位置以后的代码. 如果函数体代码比较多,需要较长的执行时间,那么函数调用机制占用的时间可以忽略:如果函数只有一两句语句,那么大部分的时间都会花费在函数调用机制上,这种时间开销就不容忽视. 为了消除函数调用的时空开销,C++在编译时将函数调用处用函数体替换,即内联函数. 注意:要在函数定义出

python3-学习正则表达式+dict/list内置函数(学习笔记)

正则表达式 \s 空格(包括tab等空白符) [] 此范围内1个任意字符 \w 1个字母或数字 ^ 行的开头 \d 1个数字 $ 行的结尾 . 1个任意字符 {n} n个字符 * 0~任意个字符 {n,m} n~m个字符 + 1~任意个字符(至少1个) () 分组 A|B A或者B ? 0~1个字符:加在+.*后为非贪婪匹配(尽可能少的匹配) dict/list内置函数 dict.items() 迭代dict的key-value对, for k,v in dict.items() k+"=&qu

c++学习笔记(2)类的声名与实现的分离及内联函数

一.类的声名与实现的分离: 和c函数声明与实现分离类似 有.h : 类的声明 .cpp : 类的实现 在在一个类的cpp中应该包含本类的.h文件 在cpp中类的使用:例: 1 //Circle类 2 //Circle.h 3 class Circle{ 4 private: 5 double radious; 6 public: 7 Circle(); 8 }; 9 //Circle.pp 10 #include “Circle.h” 11 Circle::Circle(){ 12 Radius

内联函数 inline 漫谈

内联函数存在的结论是: 引入内联函数是为了解决函数调用效率的问题 由于函数之间的调用,会从一个内存地址调到另外一个内存地址,当函数调用完毕之后还会返回原来函数执行的地址.函数调用会有一定的时间开销,引入内联函数就是为了解决这一问题. 不用inline修饰的函数, 汇编时会出现 call 指令.调用call指令就是就需要: (1)将下一条指令的所在地址入栈 (2)并将子程序的起始地址送入PC(于是CPU的下一条指令就会转去执行子程序). 原因 因为调用函数实际上将程序执行顺序转移到函数所存放在内存

iOS OC内联函数 inline的详解

inline 在iOS中的一些框架中,static inline是经常出现的关键字组合. static自不用多说,表示在当前文件中应用,如 static A, 在其它文件中也可以出现static A.不会导致重名的错误. inline.内联函数. 作用:替代宏. (如果你在看框架时,看到inline不解,搜索到这篇文章,看到这里可以不用看下面的详述了) 在框架中出现inline时,如YYKit框架.我们稍加观察就会发现它出现在.h文件中. such as: static inline CGFlo