我負責的V8 JavaScript引擎,在我的大學制定新的學生提供學習的環境,和我加強與此:
d8.cc:309
char* input = NULL;
{ // Release lock for blocking input.
Unlocker unlock(isolate);
input = fgets(buffer, kBufferSize, stdin);
}
- 它叫什麼名字?
- 我如何在其他情況下使用它?
- 在C++中只有公平嗎?
我負責的V8 JavaScript引擎,在我的大學制定新的學生提供學習的環境,和我加強與此:
d8.cc:309
char* input = NULL;
{ // Release lock for blocking input.
Unlocker unlock(isolate);
input = fgets(buffer, kBufferSize, stdin);
}
就語言標準而言,整體結構(即未命名的塊)被稱爲複合語句。它有助於引入新的範圍。
在C++中,通常有兩種用途此:
爲了限制一個局部變量來的代碼的特定部分;目標是儘量減少「污染」的範圍,並使代碼讀者更容易。 (在C和Java等其他語言中也是如此)。
嚴格控制對象/資源的生命週期,因爲範圍局部變量的析構函數將在範圍的末尾自動調用。這可以用於幾個聰明的事情,例如自動關閉文件句柄,釋放互斥,等等。所以你可能會聽到人們談論如有限範圍的互斥體。 (C和Java沒有析構函數,所以這個概念不會被翻譯。)
要回答第(3)部分:在C語言中也是合法的,但由於C99允許在任何地方使用變量聲明,因此沒有用處。在C++中,主要優點是作用於新塊的變量在塊的末尾調用它們的析構函數。這似乎是這裏的目的。 –
它沒有名字,它是一段代碼。大括號在Unlocker控制的鎖上放置了一個明確的生命週期。
這是C和C++中非常有效的技術。在C++中,使用RAII來限制對象的生命週期並及時釋放資源(比如鎖)的可能性更大一些,儘管在C中使變量的生命週期對讀者。
註解:在C和C++中,作用域不僅控制生命週期,取決於生命週期,其內部聲明的(temp)變量的可見性僅限於其範圍。因此,在這樣的範圍內聲明的變量不能從封閉範圍訪問。但是一定要小心,因爲範圍中的聲明會從封閉範圍中映射具有相同名稱的標識符! – Sam
請參閱[在C++中使用括號的作用域](http://stackoverflow.com/questions/5072845/scope-with-brackets-in-c)。 – DCoder
你沒有道理。以合理的方式改寫問題 – SomeWittyUsername