5
Q
C++靜態變量
A
回答
10
有幾個選項。即來到我的腦海裏的第一件事是,C++允許類模板的靜態數據成員在一個以上的翻譯單位來定義:
template<class T>
struct dummy {
static int my_global;
};
template<class T>
int dummy<T>::my_global;
inline int& my_global() {return dummy<void>::my_global;}
連接器將多個定義合併成一個。但是inline
獨自也能在這裏幫助和這個解決方案要簡單得多:
inline int& my_global() {
static int g = 24;
return g;
}
你可以把這個內聯函數成一個頭文件並將其包含到許多翻譯單元。 C++保證這個內聯函數返回的引用將始終引用同一個對象。確保該功能具有外部鏈接。
相關問題
- 1. C++靜態變量
- 2. C++ - 靜態變量
- 3. C++靜態變量動態
- 4. 靜態與非靜態變量C++
- 5. C++中的靜態變量
- 6. C++:靜態成員變量
- 7. C++靜態成員變量
- 8. C#Webservice和靜態變量
- 9. 靜態變量 - Visual C
- 10. C#線程靜態變量
- 11. C中的靜態變量
- 12. c#:(靜態)班級變量
- 13. C#靜態和常量變量內存
- 14. Objective-C靜態常量變量
- 15. 靜態變量
- 16. 靜態變量
- 17. 靜態變量
- 18. 靜態變量
- 19. 靜態變量
- 20. 靜態變量
- 21. 靜態變量
- 22. 靜態變量
- 23. 靜態類中的靜態變量和非靜態類中的靜態變量
- 24. 函數內的靜態變量vs C++中的靜態類變量
- 25. C++:靜態成員函數和變量 - 重新定義靜態變量?
- 26. 靜態變量ASP.NET
- 27. Python ...靜態變量?
- 28. 靜態變量值
- 29. PHP靜態變量
- 30. JavaScript - 靜態變量?
+1本地靜態是全局數據最簡單的方法,尤其是因爲新的C++ 0x標準即使在多線程應用程序中也能保證它們的正確初始化。 – 2010-09-19 18:52:48
我還應該補充說第二個變體有一個缺點 - g僅在my_global的第一次調用時被初始化。因此,編譯器會在每個調用中插入比較,跳轉和線程警衛 - 這會使調用變慢(這對於庫入口點可能很重要)。 – 2015-02-20 19:43:34
@AlexEngy:在這種情況下,它是一個int,它可能在靜態初始化時沒有動態初始化中的線程安全開銷。 – sellibitze 2015-02-20 23:21:49