c ++中的内联函数

时间:2016-02-16 11:44:20

标签: c++

如果是内联函数,编译器将从调用它的位置复制整个函数。如果我遵循该指令,该程序的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;
}

4 个答案:

答案 0 :(得分:6)

函数内联的事实不会改变函数的语义。

该函数按值接收其参数,因此它修改的唯一内容是它自己的参数。它不会修改main()中“x”变量的值。

通过内联此函数,函数的逻辑语义保持不变。它仍然仅修改自己的参数值,并且对main()中的“x”值没有影响,并且其内联状态不会改变该值。

答案 1 :(得分:3)

内联函数不是宏,它只是一种优化方法,行为与普通函数相同。

答案 2 :(得分:2)

编译器在编译时替换内联函数的定义,而不是在运行时引用函数定义。 更改函数或程序的行为。

您仍然需要通过引用传递x,而不是通过值传递,以便对其进行修改。

此外,调用内联函数只会向编译器提供建议。在大多数情况下,编译器将使函数内联而不会使程序员干扰,以进行优化。

答案 3 :(得分:2)

这与内联声明的函数无关。

整数按值传递,即函数中的int x是传递给函数的副本。然后将副本修改为10,并在保留函数时超出范围。原始变量保持不变。

如果要修改参数,请按引用传递,即将函数头更改为inline void f(int &i)