调用函数时需要一定的时间和空间的开销。C++提供一种提高效率的方法,即在编译时将函数调用处用函数体替换,类似于C语言中的宏展开。这种在函数调用处直接嵌入函数体的函数称为内联函数(inline function),又称内嵌函数或内嵌函数。
指定内联函数的方法很简单,只需要在定义函数时增加 inline 关键字。
注意:是在函数定义时增加 inline 关键字,而不是在函数声明时。在函数声明时增加 inline 关键虽然没有错误,但是也没有任何效果
inline 关键字放在函数声明处不会起作用:
inline void swap(int &a, int &b);
void swap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
inline 关键字应该与函数体放在一起:
void swap(int &a, int &b);
inline void swap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
采用内联函数可以有效避免函数调用的开销,程序执行效率更高。使用内联函数的缺点就是,如果被声明为内联函数的函数体非常大,则编译器编译后程序的可执行码将会变得很大。
另外,如果函数体内出现循环或者其它复杂的控制结构的时候,这个时候处理这些复杂控制结构所花费的时间远大于函数调用所花的时间,因此如果将这类函数声明为内联函数意义不大,反而会使得编译后可执行代码变长。
通常在程序设计过程中,我们会将一些频繁被调用的短小函数声明为内联函数。
应当说明:对函数作inline声明,只是程序员对编译系统提出的一个建议,也就是说它是建议性的,而不是指令性的。并非一经指定为inline,编译系统就必须这样做。编译系统会根据具体情况决定是否这样做。
一个完整的示例:
#include <iostream>
using namespace std;
int max(int, int, int); //函数声明,左端也可以加inline
int main( )
{
int i=10, j=20, k=30, m;
m = max(i, j, k);
cout<<"max="<<m<<endl;
return 0;
}
inline int max(int a, int b, int c) //定义max为内联函数
{
if(b>a) a=b;
if(c>a) a=c;
return a;
}
运行结果:
max=30
由于在定义函数时指定它为内置函数,因此编译系统在遇到函数调用“max(i, j, k)”时,就用max函数体的代码代替“max(i,j, k)”,同时将实参代替形参。
这样,程序第6行 “m=max(i, j, k);”就被置换成:
if (j>i) i=j;
if(k>i) i=k;
m=i;
分享到:
相关推荐
c++中的宏、内联函数和宏的比较 c++中的宏、内联函数和宏的比较 c++中的宏、内联函数和宏的比较 c++中的宏、内联函数和宏的比较 c++中的宏、内联函数和宏的比较
C++ 内联函数是通常与类一起使用。如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方。对内联函数进行任何修改,都需要重新编译函数的所有客户端,因为编译器需要重新更换...
内联函数及三种重载代码,C++实习经常用到的代码内容
对 C++ 内联函数进行了说明
工程主要时C++内联汇编的示例,内部简单的用汇编实现了函数传参及调用,循环以及if语句的实现
C++语言内联函数的引出-宏函数的缺陷
c++钩子函数:copy hook c++调用钩子函数监视复制文件操作
内联函数体要放在头文件中。基本知识。需要的可以看。
主要介绍了c++内联函数(inline)使用详解,需要的朋友可以参考下
对内联函数与普通函数的一些比较与分析.doc
内联函数(内嵌函数,内置函数) 调用函数时需要一定的时间和空间的开销。C++提供一种提高效率的方法,即在编译时将函数调用处用函数体替换,类似于C语言中的宏展开。这种在函数调用处直接嵌入函数体的函数称为内联...
自己整理的内联函数相关知识。 一、inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。 表达式形式的宏定义一例: #define ExpressionName(Var1,Var2) ((Var1)+(Var2))*(...
MATLAB中的内联函数借鉴了C语言中的内联函数,在C语言中,内联函数是通过编译器控制来实现的,它只在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的时间和空间开销。在MATLAB中也...
本文主要介绍了预处理宏和内联函数的区别,转载的,希望大家一起分享
C++Hook(钩子)编程,通过内联汇编,使类成员函数代替全局函数(静态函数)[收集].pdf
内联函数的定义格式、编程风格、优缺点、使用注意事项,以及与宏的区别
内联函数和宏的区别,这是好多新手容易感觉困扰的地方 ,我也曾经困惑,故分享此资料,希望共同进步
2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会; 3.内联函数可以访问类的成员变量,宏定义则不能; 4.在类中声明同时定义的成员函数,自动转化为内联函数。文章(一)内联...
内联函数首先是函数,这就意味着函数的很多性质都适用于内联函数,即内联函数先把参数表达式进行运算求值,然后把表达式的值传递给形式参数。 内联函数与带参数宏定义的另一个区别是,内联函数的参数类型和返回值...
arm算法优化编程手册,提供armv7 armv8的所有内联指令