C 等價於Java 靜態區塊
在Java 中,靜態區塊提供了一種在實例化類別之前初始化靜態成員的便捷方法。然而,C 在類別中沒有靜態區塊。
選項1:在進程載入時初始化
要在進程載入時實現初始化,請在任何外部使用靜態變數類,也稱為「翻譯單元範圍」。
<code class="cpp">// translation-unit-scope-static-initialization.cpp static_block { // Code to initialize your static variables }</code>
選項2:在類別實例化時初始化
因為C 不允許初始化對於非常量靜態成員,我們需要一種間接方法。這是一種解決方法:
<code class="cpp">// static-initialized-via-base-class.cpp class StaticInitialized { public: static bool staticsInitialized = false; virtual void initializeStatics() = 0; }; class MyClass : private StaticInitialized { static int field1; static int field2; private: void initializeStatics() override { // Code to initialize field1 and field2 } };</code>
需要注意的是,這兩個選項都不能保證初始化的順序,因為C 中的靜態變數初始化順序不是確定性的。
以上是如何在 C 中模仿 Java 靜態區塊:初始化策略和注意事項的詳細內容。更多資訊請關注PHP中文網其他相關文章!