C ++内联函数,通过值传递的参数

时间:2014-11-17 17:52:35

标签: c++ inline pass-by-value

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

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

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

那么内联函数如何工作?

3 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:4)

&#39;直列&#39;不会像宏一样用函数体替换文本。它用EQUIVALENT生成的代码替换函数调用,因此它的功能与它不是内联的没有区别。

答案 2 :(得分:0)

内联时应考虑两件事。

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

2)你应该总是内联像getter / setter这样非常小的函数。因为内联大函数或递归函数导致代码膨胀,这违背了内联的目的。

内联函数也有静态链接。