我最近閱讀了關於C++中的引用。我意識到引用的基本屬性,但我仍然無法弄清楚爲什麼下面兩個程序產生不同的輸出。參考文獻 - 爲什麼以下兩個程序產生不同的輸出?
#include<iostream>
using namespace std;
int &fun()
{
static int x = 10;
return x;
}
int main()
{
fun() = 30;
cout << fun();
return 0;
}
該程序打印30
作爲輸出。根據我的理解,函數fun()
返回一個對由x
佔用的內存位置的引用,然後將其賦值爲30
,並在第二次調用fun()
時忽略賦值語句。 現在考慮這個方案:
#include<iostream>
using namespace std;
int &fun()
{
int x = 10;
return x;
}
int main()
{
fun() = 30;
cout << fun();
return 0;
}
該程序生成的輸出爲10
。是否因爲在第一次呼叫後x
被分配了30
,並且在第二次呼叫後它又被覆蓋爲10
,因爲它是一個局部變量?我錯了嗎?請解釋。