你能初始化C++中的全局變量嗎?如果可能的話,你可以使用什麼值?你能初始化全局變量到C++中嗎
回答
是的,當然你可以初始化全局變量。對於內置類型,您可以使用任何可用於賦值的值(也可以初始化不能分配的數組)。對於一個類的類型,由你決定什麼類型/值將被允許(和/或要求),當你設計類。對於預定義的類,您基本上必須查閱文檔以找出它允許/需要的內容。
然而,最終,它是一個全局的事實並不影響可以提供的值。作爲一個全局可以影響你如何獲得價值 - 特別是,當初始化完成後,你顯然不能使用那些尚未提供的值。這可能會比最初看起來更微妙一點,因爲保證全局變量相對於其他變量的初始化順序很少,所以(例如)當全局變量的構造函數執行時,std::cin
,std::cout
和std::cerr
可能尚未構建,所以如果您想根據用戶的輸入初始化某些內容,則可能需要採取特殊步驟,以確保初始化的順序或其他(例如)針對該特定方式使用C風格的I/O工作。
當然可以。爲什麼我們不能?
//global variables
int g_int = 100;
int g_float = 10.0;
int g_char = 'A';
class X
{
int value;
public:
X(int v) : value(v){}
};
X g_x1(10); //initialize with argument 10
X g_x2 = X(198); //with arg 198
int main()
{
}
允許值取決於變量的類型。對於int
,0或42都可以。對於string
,「hello world」有效。初始化全局變量與初始化其他變量相同,因此您可以使用很多自由度。
通常最好保持簡單;如果你需要一個複雜的全局初始化器,那麼這個變量可能會出錯,但如果需要的話,你可以做很多事情。
這樣做的,在其最基本的語法是:
int global_Int = 42;
string global_String = "Hello World";
但是,如果這是在插頭來實現(因爲全局在共同的頭部一般聲明),你會得到重複的聲明和錯誤。爲了解決這個問題,使用extern關鍵字來聲明它們,然後初始化代碼文件:
標題:
extern int global_Int;
extern string global_String;
代碼:
#include "header.hpp"
int global_Int = 42;
string global_String = "Hello World";
然後就包括你的頭每當你需要使用變量。您還可以根據需要添加其他關鍵字(例如,如果您需要const全局變量)。
可能是相當多的東西,如構造函數的調用:
static const std::string boo("42");
不過要小心 - 這些main()
前運行,但它們的順序是不確定的(見"static initialization order fiasco")。
- 1. C++初始化全局變量
- 2. C++全局變量初始化順序
- 3. 在C初始化的全局變量++
- 4. 全局變量初始化優化
- 5. 初始化常量和全局變量
- 6. C中的全局變量是否始終初始化爲零?
- 7. 使用PHP初始化全局變量
- 8. 全局變量不初始化
- 9. 聲明和初始化全局變量
- 10. 如何初始化的全局變量
- 11. Perl未初始化的全局變量
- 12. 全局變量未初始化nodejs
- 13. GCC,未初始化的全局變量
- 14. 問題初始化的全局變量
- 15. 全局變量初始化查詢
- 16. Flask藍圖初始化 - 初始化一些全局變量
- 17. 全局初始化C++類
- 18. 在Obj中初始化全局變量C
- 19. 在循環中初始化變量 - 使用全局變量?
- 20. 初始化局部變量
- 21. 我可以重新初始化全局變量以覆蓋C中的值嗎?
- 22. 初始化全局常量變量是否安全?定義?
- 23. C++全局變量和初始化順序
- 24. 全局變量的條件初始化C
- 25. C++如何正確初始化全局變量?
- 26. 當C++全局變量未被顯式初始化時警告?
- 27. 全局變量的C++初始化順序
- 28. 如何讓靜態變量初始化爲全局變量
- 29. 我可以使用全局變量初始化一個類變量嗎? (ruby)
- 30. 不能初始化變量
爲什麼不給我們你的代碼不能? – 2011-05-01 03:38:12