2011-09-30 118 views
9

我這個過於簡單化的問題道歉,但我似乎無法找出這個例子在書中我讀:有人可以解釋這段代碼(爲什麼這些括號在這裏)?

void f5() 
{ 
    int x; 
    { 
     int y; 
    } 
} 

什麼是圍繞int y的括號?你可以隨身攜帶牙套嗎?如果是這樣,何時以及爲什麼要這樣做,或者這只是書中的錯誤?

+2

這是一種技術,主要應用於C語言,用於在第一個語句後創建本地臨時值。當執行退出結束大括號時,在該範圍內創建的所有變量消失。 –

回答

13

大括號表示大括號內的代碼現在處於不同的範圍。如果您嘗試訪問大括號外的y,則會收到錯誤消息。

+0

這是有道理的,但是令我困惑的是我認爲這必須在一個函數內。如果你可以在一個函數中放置大括號,我看不出爲什麼你需要使用嵌套函數 - 或者我在左邊的字段中? – Gary

+4

一個函數有它自己的作用域,但是也可以在一個函數中有作用域。這可能非常有用,例如C++對象具有析構函數,當對象超出範圍時,這些對象可用於在特定點釋放資源。你可能想要做這個中間功能。 – Benj

4

它的定義範圍。變量Y不能在大括號之外訪問。

4

大括號表示範圍,變量x將在內部大括號的範圍內可見,但y在大括號範圍外不可見。

3

大括號定義範圍級別。在大括號外,y將不可用。

1

這看起來像一個錯誤(不知道的情況下)

這樣做,你已裝箱的括號內的值y,因此無法使用外面。

當然,如果他們試圖解釋的範圍,這可能是一個有效的代碼

6

它的作用域變量的問題,如:

void f5() 
{ 
    int x = 1; 
    { 
     int y = 3; 
     y = y + x;   // works 
     x = x + y;   // works 
    } 
    y = y + x;    // fails 
    x = x + y;    // fails 
} 
3

在範圍出口內的對象銷燬。例如,您可以將一個關鍵部分放在花括號中,並在那裏構建一個鎖定對象。然後,您不必擔心忘記解鎖它 - 在正常情況下或因爲例外情況而退出範圍時,會自動調用析構函數。

相關問題