C++ 中的内联函数

Inline Function in c++

本文关键字:函数 C++      更新时间:2023-10-16

如果是内联函数,编译器会从调用它的位置复制整个函数。如果我按照该指示进行操作,则程序的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("%dn",x);
    return 0;
}

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

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

通过内联此函数,函数的逻辑语义保持不变。它仍然只修改自己参数的值,并且对main((中"x"的值没有影响,并且它的内联状态不会改变这一点。

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

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

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

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

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

您仍然需要通过引用而不是按值传递x才能对其进行修改。


此外,内联调用函数只会给编译器一个建议。在大多数情况下,编译器将在没有程序员干预的情况下使函数内联,以进行优化。