C 中靜態成員變數的初始化
在 C 中,靜態成員變數在類別定義之外初始化。這項設計選擇引發了有關其邏輯推理和潛在遺留影響的問題。
外部初始化的原因
靜態成員必須在一個翻譯單元中定義才能遵守單一定義規則。如果類別內允許初始化,則包含頭檔的不同翻譯單元中可能會出現多個定義。
範例
考慮以下程式碼片段:
struct Gizmo { static string name = "Foo"; };
如果要在類別內初始化名稱,則會在包含頭檔的每個翻譯單元中定義該名稱。這將違反單一定義規則。
整數靜態成員
C 允許在宣告中初始化整數靜態成員。然而,在單一翻譯單元內仍需要外部定義來滿足單一定義規則。這是一個語法快捷方式:
struct Gizmo { static const int count = 42; };
只要初始化中使用的表達式是const 整數或枚舉類型,可以在編譯時求值,並且定義存在於單一翻譯單元中,這種做法是有效的。例如:
gizmo.cpp
#include "gizmo.h" const int Gizmo::count;
以上是為什麼 C 靜態成員變數在類別定義之外初始化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!