簡體   English   中英

在C ++頭文件中聲明和定義靜態變量?

[英]Declare and define static variable in C++ header?

許多 其他 問題涉及如何通過在頭文件中聲明變量並在.cpp文件中定義(分配)來分配變量。

我想要做的是不為我的類使用任何.cpp文件,並將所有函數定義為內聯(在頭文件中)。 我遇到的問題是如何定義靜態成員變量,以便即使.h文件包含在多個編譯單元中,我也不會得到“此處首次定義”鏈接器錯誤。

如果它完成了工作,我會對預處理器黑客等開放。 我只是想避免任何.cpp文件。

如果重要我正在使用GCC。

如果你真的必須避免任何.cpp文件,你可以濫用單例模式:

class Foo {
    public:
        static Bar& getMyStatic() {
            static Bar bar;
            return bar;
        };
};

這是有效的,因為現在變量是函數內部的靜態變量,而static在函數上下文中的含義與類上下文中的含義不同。 對於函數,鏈接器確實識別多個相同的定義並丟棄副本。

但是,當然,我強烈建議不要避免使用.cpp文件:這意味着你需要在一個大塊中構建整個程序或至少大部分程序。 您所做的每一項更改都需要完全重建,這會顯着減慢您的更改 - 編譯 - 測試周期。 對於可能不是問題的非常小的項目,但它適用於中型到大型項目。

對於靜態變量,您必須放入.cpp文件,以避免在意圖只有一個靜態變量的情況下出現多個靜態變量。 除了使用大型內聯方法不是一個好主意,因為它只是對編譯器的一個提示,但也使編譯需要更長時間(你在開發中更改了一些這些函數,然后需要編譯很多相關文件!)

但是,如果你不想要很多只帶有一些靜態的.cpp文件,為什么不用一個文件來存儲它們。

只要您在整個項目中只包含該頭文件一次,就可以了。 然而,這是一個非常強烈的要求,並且很難讓其他人堅持。

你可以有一個static變量,但這意味着你有一個以上的整個程序,這可能或不重要(請記住,你將來不能改變它,所以你可能有一個所謂的“潛在的錯誤“ - 你改變了一些其他的代碼,突然間你創建了一個新的bug,因為變量不是一個變量)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM