我有幾個全局變量需要設置值,我應該將它設置爲main/winmain函數嗎?或者我應該在第一次使用每個var時設置它?我應該在啓動時還是第一次使用它們時設置全局變量值? C++
回答
相反,如何根本不使用全局變量?
將變量作爲函數參數傳遞給需要它們的函數,或將它們的指針或引用存儲爲使用它們的類的成員。
我需要每次調用該函數的權利?或者至少對於每個使用它的課程? – extintor 2010-05-22 18:52:15
@extintor:如果你正在從一個函數變量的值,那麼你可以調用該函數一次,保存它的結果,而且結果傳遞給任何需要它的函數或類。 – 2010-05-22 18:58:14
是否有機會不使用全局變量?計算其中的任何一個很貴?如果是這樣,那麼你有一個懶惰初始化的參數。如果他們很快計算或總是要使用,那麼在啓動時啓動它們。沒有理由不這樣做,並且您將節省您每次使用它時必須檢查初始化的頭疼。
主要的變種是windows版本和內部版本號,我認爲它的計算並不昂貴。我仍然在討論在啓動時設置它們或每次爲每個類調用函數。這兩種方式都可以正常工作,但我是C++新手,但我仍然不知道最佳實踐。 – extintor 2010-05-22 18:55:20
然後我會遵循James的建議,而不是使用全局變量。 – stonemetal 2010-05-22 19:00:24
當鏈接器鏈接您的程序在一起,全局變量(也稱爲可寫靜態數據)被分配到自己的存儲部分(ELF .data段),並有一個值預先分配給他們。這意味着編譯器不需要生成指令來初始化它們。如果您在主函數中初始化它們,編譯器將生成初始化指令,除非它足夠聰明以優化它們。
這對於ELF文件格式當然是對的,我不確定其他可執行格式。
- 1. 我應該每次使用全局變量還是調用函數? C++
- 2. 我應該使用全局變量還是在java中傳遞變量?
- 3. 我應該使用會話變量還是全局超級變量
- 4. 第一次啓動時設置屏幕
- 5. 我應該使用全局變量嗎?
- 6. 我應該在第一次運行時使用設置嚮導還是使用MSI?
- 7. 我應該把變量放在window.document中還是使用全局上下文?
- 8. 。我們應該在循環之前還是在內部聲明一次變量?
- 9. 我應該爲所有我的網站設置設置會話還是通過類變量訪問它們?
- 10. 設置全局變量,把它在HTML
- 11. 我應該在函數中使用$ this->幾次,還是應該創建一個局部變量?
- 12. Angular - 我應該使用局部變量還是this.variable
- 13. 在swift中,它是一個全局變量還是屬性?
- 14. 第一次啓動時的語言未被設置或使用
- 15. 移動局部變量時我應該使用std :: move嗎?
- 16. 如何在第一次啓動應用程序時使Activity只啓動一次?
- 17. 如何在全局變量的值更改時啓動方法?
- 18. 僅在應用程序第一次啓動時啓動活動
- 19. C#如何在啓動時設置全局數組的大小?
- 20. 在c#中設置全局變量class
- 21. C++:我應該使用Boost.Date_Time Posix時間還是本地時間?
- 22. NavigationBarItem在第一次應用程序啓動時放錯位置
- 23. 反映時:應該設置屬性還是直接設置值? (Objective-C)
- 24. 在運行時或啓動時設置scss變量的值
- 25. 時區應該是一個常數還是一個變量?
- 26. 從C++/C設置全局LUA_PATH變量?
- 27. C++我應該做什麼,而不是全局變量?
- 28. 何時和爲什麼應該使用類和全局變量?
- 29. 我應該使用一個位集還是一個向量? C++
- 30. 設置NSPopUpButton在第一次啓動
嘗試使用'0'作爲初始值,並且不需要手動初始化它們,然後 – 2010-05-22 18:12:56
@Merlyn,是的,您的評論是不正確的。如果可以的話,我也會降低它的速度:)請閱讀有關命名空間範圍變量的初始值。 – 2010-05-22 21:01:08
@Johannes:對不起。你是對的,我充滿了它:)似乎在主執行之前BSS被初始化爲零,這就是全局存儲的地方。然而,這又是另一個C++太複雜的例子:) Upvoted你的糾正。 – 2010-06-04 08:32:10