首頁 >後端開發 >C++ >為什麼 C 靜態成員變數在類別定義之外初始化?

為什麼 C 靜態成員變數在類別定義之外初始化?

DDD
DDD原創
2024-12-03 18:11:23407瀏覽

Why are C   Static Member Variables Initialized Outside the Class Definition?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn