任何人都可以告訴我在下面的代碼中發生了什麼。我期待左值錯誤,如果我刪除了函數的引用返回類型,就會發生。但它給了我20個輸出。請解釋。謝謝。C++參考和左值
int &fun()
{
static int x = 10;
return x;
}
int main()
{
fun() = 20;
cout << fun();
return 0;
}
任何人都可以告訴我在下面的代碼中發生了什麼。我期待左值錯誤,如果我刪除了函數的引用返回類型,就會發生。但它給了我20個輸出。請解釋。謝謝。C++參考和左值
int &fun()
{
static int x = 10;
return x;
}
int main()
{
fun() = 20;
cout << fun();
return 0;
}
基本C++語義:
static
變量。如果你要分配的東西x
的fun()
外,x
有地方住吧?使其成爲static
爲其提供了一個永久點,每次都會重新訪問。這就是爲什麼20
的價值依然存在。
感謝您的分數.. – sarath
哪部分你不明白? – juanchopanza
不要忘記'x'是靜態的。 – 101010
可能使'x'靜態來擺脫編譯器警告關於返回對非靜態局部變量的引用... – Jeff