C++内联函数,参数按值传递

C++ inline function, parameter passed by value

本文关键字:参数 按值传递 函数 C++      更新时间:2023-10-16

好吧,上次我检查内联函数是一个函数,其主体直接替换在调用该函数的程序中的每个点。所以当我这样做时:

#include <iostream>
inline void increment(int n) { n = n + 1; }`
int main() { 
   int n = 0;
   increment(n);
   std::cout << "Result " << n;
}

我应该有:结果 1。相反,我得到 0。

那么内联函数是如何工作的呢?

'inline' 不会像宏那样用函数体替换文本。 它将函数调用替换为 EQUIVALENT 生成的代码,因此在功能上它与非内联没有什么不同。

这不是内联的问题,而是方法签名错误的问题:

inline void increment(int& n) {
  ++n;
}

你要一份,你得到一份。而是要求参考。不要将内联函数混淆,它们是不一样的。事实上,inline声明内容通常会适得其反,因为编译器会根据您的优化设置为您进行此调用。

联时应考虑两件事。

1)内联只是对编译器的请求,而不是命令用其主体替换函数调用,以避免与函数调用相关的开销。

2)您应该始终内联非常小的函数,例如getter/setter。因为内联大函数或递归函数会导致代码膨胀,从而破坏内联的目的。

内联函数还具有静态链接。