簡體   English   中英

c ++中的內聯函數

[英]Inline Function in 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;
}

函數內聯的事實不會改變函數的語義。

該函數按值接收其參數,因此它修改的唯一內容是它自己的參數。 它不會修改main()中“x”變量的值。

通過內聯此函數,函數的邏輯語義保持不變。 它仍然只修改自己的參數值,並且對main()中的“x”值沒有影響,並且其內聯狀態不會改變它。

內聯函數不是宏,它只是一種優化方法,行為與普通函數相同。

編譯器在編譯時替換內聯函數的定義,而不是在運行時引用函數定義。 不會改變函數或程序的行為。

您仍然需要通過引用而不是值來傳遞x ,以便對其進行修改。


此外,調用函數內聯僅向編譯器提供建議 在大多數情況下,編譯器將使函數內聯而不會使程序員干擾,以進行優化。

這與內聯聲明的函數無關。

整數按值傳遞,即函數中的int x是傳遞給函數的副本。 然后將副本修改為10,並在保留函數時超出范圍。 原始變量保持不變。

如果要修改參數,請按引用傳遞,即將函數頭更改為inline void f(int &i)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM