inline函数

偏执的太偏执、 2022-06-16 08:42 320阅读 0赞
  1. 先给出一到判断题:inline函数表示编译器一定会将函数体直接插入到调用此函数的地方,这样可以加快程序的运行速度,上面说法是否正确.答案是false。为什么呢?下面给出解释:

首先我们要明白内联函数提出的原因及意义。下面使用c++primer中文版第四版(P221)中的例子详细解释一下。

//定义了查找更短字符串的函数










1


2


3


4



const
string &shortString(
const
string &s1,
const
string &s2)


{


return
s1.size<s2.size()?s1:s2;


}

我们可以看到我们将查找更短字符串的操作定义了一个函数,这样做有很多的好处:

①更易于单身狗程序猿的理解;

②如果要修改,直接修改函数,不用修改所有的等价表达式,真是一本万利啊!

③使用函数确保每个调用实例能够统一;

④可以重复调用,代码重用,貌似和2一样啊;

你看,写成函数有这么多的好处,多好啊!但是,还是有缺点的:调用函数比直接用等价表达式要慢很多。调用等价表达式,直接编译代码一些列工作就行了。但是改成函数就不一样了,包括:调用前要先保存寄存器,并在返回时恢复;复制实参;程序还必须mov转到一个新的位置执行。你看,改成函数你好理解了,但是机器累到了。因此,就提出了内联函数,这样做就有好处:内联函数避免了函数调用的开销。将函数设置成内联函数就是将它在程序中的每个调用点上“内联”的展开。

cout<<shortString(s1,s2)<<endl;

那么编译是直接展开为:

cout<<( s1.size<s2.size()?s1:s2 )<<endl;

看起来不错,但是吧,编译器也很有脾气,内联函数对于编译器来说只是一个建议,编译器可以选择忽略,还是调用函数。你说它是不是很贱,不听老人言,非要吃力不讨好。貌似答案中提到,内联函数太长就忽略了。还有一点,内联函数需要在头文件中定义,这个跟一般的函数定义不同。

发表评论

表情:
评论列表 (有 0 条评论,320人围观)

还没有评论,来说两句吧...

相关阅读

    相关 【46】大坑inline函数

    原文链接 [原文链接][Link 1] 这一篇将会聊聊C++中一个极具迷惑性的关键字 ———— inline。 虽然只是一个小小的关键字,但要是没有真正了解它,也是

    相关 inline函数与普通函数的区别

    inline函数与普通函数的区别 举例 以下例子均是在比较老的gcc中比较普遍的例子,只是方便理解,实际上gcc等编译器现在已经能够识别部分短小函数自动将其变为内联

    相关 inline成员函数

    注意这里讨论的只是类的成员函数。 1。在类的声明里实现的函数自动为inline。 也可以在类申明外定义为inline。但是这一部分必须与类的声明在同一个.h文件里。如果定义在

    相关 inline函数解析

    inline函数的优势: 比宏优秀,像函数一样使用但是没有函数调用那么大的开销 编译器的最优化机制有能力对不含函数调用的代码进行语境最优化 inline的缺点: 目标码

    相关 inline函数

          先给出一到判断题:inline函数表示编译器一定会将函数体直接插入到调用此函数的地方,这样可以加快程序的运行速度,上面说法是否正确.答案是false。为什么呢?下面

    相关 C++ inline函数

    1.C++引用inline原因 在我们的系统中可能经常会有一些场景:for循环调用一个工具处理函数或则是递归调用一些算法。我们知道调用一个任意函数都会为这个函数创建栈空间