POD表示沒有構造函數和析構函數的基本數據類型。靜態本地POD常量是如何初始化的?懶惰或不?
我很好奇,編譯器如何處理POD靜態局部變量的延遲初始化。如果函數意圖在多線程應用程序中的嚴格循環內運行,那麼惰性初始化的含義是什麼?這些是可能的選擇。哪一個更好?
void foo_1() {
static const int v[4] = {1, 2, 3, 4};
}
void foo_2() {
const int v[4] = {1, 2, 3, 4};
}
這個怎麼樣?沒有懶惰的初始化,但語法稍微笨拙?
struct Bar
{
static const int v[4];
void foo_3()
{
// do something
}
};
const int My::v[4] = {1, 2, 3, 4};
+1:注意:在成本對象上拋出const'ness然後修改它UB(因爲它可能存儲在只讀存儲器中)。 – 2010-12-22 20:49:39
- **通常**只讀存儲器中存儲,只要流行的編譯器去。 – 2010-12-22 21:56:30
@Adam:我相信只有在變量是靜態的情況下。堆棧上的常量const變量只存儲在常規堆棧中。 – Puppy 2010-12-22 22:04:33