C++内联函数,参数按值传递
C++ inline function, parameter passed 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。
那么内联函数是如何工作的呢?
'inline' 不会像宏那样用函数体替换文本。 它将函数调用替换为 EQUIVALENT 生成的代码,因此在功能上它与非内联没有什么不同。
这不是内联的问题,而是方法签名错误的问题:
inline void increment(int& n) {
++n;
}
你要一份,你得到一份。而是要求参考。不要将内联函数与宏混淆,它们是不一样的。事实上,inline
声明内容通常会适得其反,因为编译器会根据您的优化设置为您进行此调用。
内
联时应考虑两件事。
1)内联只是对编译器的请求,而不是命令用其主体替换函数调用,以避免与函数调用相关的开销。
2)您应该始终内联非常小的函数,例如getter/setter。因为内联大函数或递归函数会导致代码膨胀,从而破坏内联的目的。
内联函数还具有静态链接。
相关文章:
- 何时应通过引用传递矢量参数而不是按值传递矢量参数?
- 将函数参数完美转发到函数指针:按值传递呢?
- C++/11 auto 关键字是在更有效时推导参数进行按引用传递,还是始终按值传递?
- 为什么在按值返回时创建临时对象,而不是在按值传递给函数参数时创建临时对象
- const-ref传递的模板化参数是否经过优化,以便在足够小时按值传递
- shared_ptr构造函数参数是否应按值传递
- 使用 std::move 将参数传递给函数,如果该参数声明为按值传递或使用移动操作数 &&,是否有区别?
- 当我按值传递参数时对象被破坏时?
- std::move 参数按值传递
- 按值传递的参数在 Visual Studio 2010, C++ 的调试器中显示为通过引用传递
- 引用成员到构造函数参数按值传递
- C++:强制实施函数,使其不能接受按值传递的任何参数
- 按值传递参考参数
- 执行同时使用按引用传递和按值传递参数的程序时出现问题
- 为什么我必须声明这些引用参数常量或按值传递
- 混合按引用传递和按值传递到可变参数模板函数有效
- 当函数按值传递参数时,复制构造函数如何工作
- 使用 Lambda 时,通过捕获子句按值传递还是通过作为参数传递来传递性能更高
- C++传递"struct"类型的参数作为引用 (&) 或按值传递
- C++内联函数,参数按值传递