如果是内联函数,编译器将从调用它的位置复制整个函数。如果我遵循该指令,该程序的o / p应为" 2010"但它显示了o / p" 2020"。为什么会这样?我是否误解了内联函数的定义?代码如下:
#include<iostream>
#include<cstdio>
using namespace std;
inline void f(int x)
{
printf("%d",x);
x=10;
}
int main()
{
int x=20;
f(x);
printf("%d\n",x);
return 0;
}
答案 0 :(得分:6)
函数内联的事实不会改变函数的语义。
该函数按值接收其参数,因此它修改的唯一内容是它自己的参数。它不会修改main()中“x”变量的值。
通过内联此函数,函数的逻辑语义保持不变。它仍然仅修改自己的参数值,并且对main()中的“x”值没有影响,并且其内联状态不会改变该值。
答案 1 :(得分:3)
内联函数不是宏,它只是一种优化方法,行为与普通函数相同。
答案 2 :(得分:2)
编译器在编译时替换内联函数的定义,而不是在运行时引用函数定义。 不更改函数或程序的行为。
您仍然需要通过引用传递x
,而不是通过值传递,以便对其进行修改。
此外,调用内联函数只会向编译器提供建议。在大多数情况下,编译器将使函数内联而不会使程序员干扰,以进行优化。
答案 3 :(得分:2)
这与内联声明的函数无关。
整数按值传递,即函数中的int x
是传递给函数的副本。然后将副本修改为10,并在保留函数时超出范围。原始变量保持不变。
如果要修改参数,请按引用传递,即将函数头更改为inline void f(int &i)