[英]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.