2016-06-10 27 views
2
#include<iostream> 
using namespace std; 

int &fun() 
{ 
    static int x = 10; 
    return x; 
} 
int main() 
{ 
    fun() = 30; 
    cout << fun(); 
    return 0; 
} 

當上面的程序運行時,輸出爲30,返回整型變量x,作爲main()函數的引用並賦值30.但不是x的範圍侷限於fun()函數嗎?如果是這樣,爲什麼我們能夠在主函數中改變它的值?C++中靜態局部變量的作用域和使用壽命

回答

2

Scope是有限的意思是任何嘗試訪問x直接範圍之外是被禁止的。

在範圍內,可以使用非限定名稱查找將名稱與其聲明相關聯。

但是,如果變量處於活動狀態,並且您通過指向相同變量的引用或指針更改它,則始終可以返回指向此變量的指針或引用。該引用的名稱可以是匿名的(臨時的),也可以綁定到某個命名的引用。

關於生命週期,當包含靜態變量的函數首次調用並在程序結束時結束時開始。

+1

是程序結束的一生嗎?我認爲編譯器使用邏輯或什麼不是,在安全之後或不可能使用時清理。 –

+0

@marshalcraft這將是有趣的,但編譯器難以分析和容易出錯。編譯器編寫者的生活很困難,沒有布朗尼分數。 –

+0

ha所有這些整數以及程序生命中不存在的內容。 –

1

確實x的範圍是限於fun()

但是因爲該函數返回一個參考x,呼叫者(即main)能夠修改x通過該引用。這就是發生在這裏的情況:x設置爲10第一個該函數被輸入,但被賦值fun() = 30更改爲30。