比方說,我有這樣的程序:靜態變量
class Foo {
public:
unsigned int bar() {
static unsigned int counter = 0;
return counter++;
}
};
int main()
{
Foo a;
Foo b;
}
(當然,這個例子是沒有意義的,因爲我明明申報「計數器」作爲私人屬性,但它只是爲了說明問題)。
我想知道C++的行爲在這種情況:將在欄()方法變量「計數器」是每一個實例一樣嗎?
+1在多線程環境中提到危險。 – Omnifarious 2010-01-29 18:20:51
假設編譯器尚未爲您處理該問題。語言定義是變量在所有方法調用中保持一致。因此,編譯器的工作是強制執行的,所以在多線程語言(C++的下一個版本)中,它是編譯器的工作。在這個版本中,它依賴於編譯器與線程庫的集成。 gcc已經涵蓋了這一點,保證在多個線程中對靜態變量的訪問是安全的。 – 2010-01-29 18:24:58
@Martin York:即C++ 0x中的靜態變量保證爲線程本地?有趣的是,它可能會讓一些人大吃一驚。就像一個很好的靜態類實例計數器。突然間,你會計算每個線程的實例。我無法相信他們會做出這樣的改變。你確定?! – Omnifarious 2010-01-29 18:27:54