問題:
在Java 中,靜態區塊用於初始化類別的靜態成員。不過C好像沒有提供類似的功能。是否有模擬 Java 靜態區塊行為的 C 習慣用法?
答案:
雖然 Java 意義上的靜態區塊在 C 中不存在,但有一個在課堂外實現類似行為的技術。靜態程式碼區塊可以使用巨集和虛擬變數的組合在翻譯單元範圍內實現。
對於進程載入時的初始化:
<code class="cpp">static_block { // Initialization code goes here }</code>
第一個類別實例化時的初始化:
<code class="cpp">class StaticInitialized { private: static bool staticsInitialized = false; private: virtual void initializeStatics() = 0; public: StaticInitialized() { if (!staticsInitialized) { initializeStatics(); staticsInitialized = true; } } }; class MyClass : private StaticInitialized { public: static int field1; static int field2; private: void initializeStatics() { // Initialization code goes here } };</code>
StaticInitialized 基底類別確保在建立MyClass 的第一個實例時僅呼叫一次initializeStatics()。
用法:
static_block 巨集可用來建立在 main() 之前執行的靜態區塊。
實作:
實作涉及透過函數呼叫初始化的虛擬變數。靜態區塊程式碼是函數的主體。巨集用於產生唯一識別碼以防止名稱衝突。
注意:
以上是Java 的靜態區塊是否有 C 等效項,以及如何實現類似的行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!