上次我检查内联函数是一个函数,它的主体直接替换在程序中调用函数的每个点。 所以当我这样做时:
#include <iostream>
inline void increment(int n) { n = n + 1; }`
int main() {
int n = 0;
increment(n);
std::cout << "Result " << n;
}
我应该:结果1。 相反,我得到0。
那么内联函数如何工作?
答案 0 :(得分:4)
这不是内联的问题,但方法签名错误:
inline void increment(int& n) {
++n;
}
你要副本,你得到一个副本。而是要求参考。不要将内联函数与宏混淆,它们不一样。事实上,声明事物inline
通常会适得其反,因为编译器会根据您的优化设置为您调用此事。
答案 1 :(得分:4)
&#39;直列&#39;不会像宏一样用函数体替换文本。它用EQUIVALENT生成的代码替换函数调用,因此它的功能与它不是内联的没有区别。
答案 2 :(得分:0)
内联时应考虑两件事。
1)内联只是对编译器的请求,而不是命令用它的主体替换函数调用,以避免与函数调用相关的开销。
2)你应该总是内联像getter / setter这样非常小的函数。因为内联大函数或递归函数导致代码膨胀,这违背了内联的目的。
内联函数也有静态链接。