内联函数(C++)

C++内联函数

内联函数是C++为提高程序运行速度所做的一项改进。常规函数和内联函数之间的主要区别不在于编写方式,而在于C++编译器如何将它们组合到程序中。

常规函数调用使程序跳到另一个地址(函数的地址),并在函数结束时返回。

C++内联函数的编译代码与其他程序代码“内联”起来,也就是说,编译器将使用相应的函数代码代替函数调用,因此,内联函数的运行速度比常规函数稍快,但代价是需要占用更多内存。

如果执行函数代码的时间比处理函数调用机制的时间长,则节省的时间将只占整个过程的很小一部分。如果代码执行时间很短,则内联调用就可以节省非内联调用使用的大部分时间。另一方面,由于这个过程相当快,因此尽管节省了该过程的大部分时间,但节省的时间绝对值并不大,除非该函数经常被调用。

要使用这项特性,必须采取下述措施之一:

  • 在函数声明前加上关键字inline;
  • 在函数定义前加上关键字inline。

通常的做法是省略原型,将整个定义(即函数头和所有函数代码)放在本应提供原型的地方。

程序员请求将函数作为内联函数时,编译器并不一定会满足这种要求。它可能认为该函数过大或注意到函数调用了自己(内联函数不能递归),因此不能将其作为内联函数。

内联函数和常规函数一样,也是按值来传递参数的。

内联与宏

inline工具是C++新增的特性。C语言使用预处理器语句#define来提供宏——内联代码的原始实现。例如:

#define SQUARE(X) X*X

这并不是通过传递参数实现的,而是通过文本替换来实现的——X是“参数”的符号标记。

a = SQUARE(5.0);
b = SQUARE(4.5 + 7.5);
d = square(c++);

其中上述三个表达式只有第一个能正常工作。
b可以被转换为 b=4.5+7.5*4.5+7.5
而d可以被转换为d=c++*c++

扫描二维码关注公众号,回复: 3400156 查看本文章

因此,如果使用C语言的宏执行了类似函数的功能,应考虑将它们转换为C++内联函数。

声明:以上整理自个人理解和Stephen Prata 著的《C++ Primer Plus》

猜你喜欢

转载自blog.csdn.net/MoooLi/article/details/82629790