内联函数
Posted zzx1905
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内联函数相关的知识,希望对你有一定的参考价值。
内联函数,关键字inline,放在函数最前面修饰。
宏函数,预处理器处理,进行简单的文本替换,没有任何编译过程。
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<iostream> 3 #include<stdlib.h> 4 5 using namespace std; 6 //宏函数,预处理阶段,是文本替换,不需要数据类型 7 //没有语法检测能力(没有编译器处理,是预处理器处理的) 8 //‘‘为续行符 9 #define MAX(a,b) 10 ((a)>(b)?(a):(b)) 11 //这里传参如果是a++和b++,那么就会异常了,因为不能检测该语法 12 13 14 inline void printAB(int a, int b) { 15 cout << "a=" << a << ",b=" << b << endl; 16 } 17 18 int main(void) { 19 int a = 10; 20 int b = 20; 21 for (int i = 0; i < 1000; i++) { 22 a++; 23 b++; 24 //定义为内联函数,编译器就会把函数体插入到调用的地方,而不是在每次循环都调用函数了 25 /* 26 { 27 cout << "a=" << a << ",b=" << b << endl; 28 } 29 1、也不是所有的内联函数都会如此,编译器会做判断,如果函数代码简单,就会采用以上的形式, 30 避免压栈、跳转、返回的额外开销; 31 2、如果函数包含了复杂的业务,那么即使定义为内联函数,编译器也还是按非内联函数处理; 32 3、在函数声明出加inline关键字定义为内联函数,并且在函数定义时也要加inline,否则编译器会直接忽略内联请求。 33 4、C++内联编译限制: 34 不能存在任何形式的循环语句、判断语句 35 函数体不能过于庞大 36 不能对函数进行取址操作 37 函数内联声明必须在调用语句之前 38 5、即使有上述限制,当函数体的执行开销远大于压栈、跳转和返回的开销时,那么内联将无意义。 39 */ 40 printAB(a, b);//如果不定义为内联函数,在每调用一次就会有一次压栈、跳转、返回的过程 41 } 42 43 system("pause"); 44 return 0; 45 }
以上是关于内联函数的主要内容,如果未能解决你的问题,请参考以下文章
<code> vs <pre> vs <samp> 用于内联和块代码片段