在C++中,const
變量對其他翻譯單元隱式隱藏。是可以預防的嗎?訪問跨變換單元的常量變量
2
A
回答
7
是的,在extern
的前面定義例如。
extern const int x = 10;
3
使用extern
關鍵字:
extern const int x = 10;
這迫使變量有外部鏈接。
對於命名空間範圍變量,這通常是默認值,並且您將使用static
(或更好的是,匿名命名空間)來強制內部鏈接。
我沒有真正知道命名空間範圍const
變量默認有內部鏈接,直到我閱讀你的問題並試用它,所以非常感謝。每天學些新東西!
3
它可以通過extern
關鍵字來實現:
// a.cpp
extern const int x = 10; // definition
// b.cpp
extern const int x; // declaration
這將產生的影響是,你將不需要重新編譯b
如果在a
的不斷變化的價值,但在同一當你放棄使用x
作爲編譯時間常數在b.cpp
(即你將不能寫int array[x];
)的能力時。
如果沒有很強烈的理由,我寧願在頭文件中定義常量,並將其包含在所有需要它的翻譯單元中;
// c.h
const int x = 10;
// a.cpp
#include "c.h"
// b.cpp
#include "c.h"
你將不得不重新編譯依賴於每個變化不斷的所有翻譯單元,但你將能夠在所有的翻譯單位在編譯時使用它。這種方法的侷限性是,如果您更改常量並僅重新編譯某些翻譯單元,則該常量的值將不一致(這違反了ODR)。
相關問題
- 1. Ada:將訪問轉換爲常量以訪問變量
- 2. 如何訪問類常量和變量
- 3. 跨文件訪問php變量
- 4. 跨線程訪問變量和方法
- 5. 訪問變量
- 6. 訪問變量
- 7. 訪問變量
- 8. 變量訪問
- 9. 訪問變量
- 10. 訪問變量
- 11. 訪問變量
- 12. 訪問變量聲明的變量
- 13. 變量的訪問
- 14. 變量的訪問
- 15. Java:易變變量訪問
- 16. 訪問模擬單元測試中類變量的靜態變量
- 17. 如何通過變量變量訪問預定義的變量
- 18. 訪問asp.net變量
- 19. 訪問TempData變量
- 20. 訪問變量環
- 21. 訪問類變量?
- 22. 訪問變量actionPerformed
- 23. C訪問變量#
- 24. 訪問類變量
- 25. Reactjs - 訪問變量
- 26. 訪問類變量
- 27. 訪問Javascript變量
- 28. 訪問NodeJS變量?
- 29. 訪問JavaScript變量
- 30. 訪問變量值
防止一個有內部聯繫,或者防止他們默認內部聯繫? – 2011-01-14 10:31:40
@Steve:只有一個。我不想改變語言規則;-) – fredoverflow 2011-01-14 10:40:23