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

為什麼要在類別宣告之外初始化 C 靜態成員變數?

Barbara Streisand
Barbara Streisand原創
2024-12-25 15:11:21801瀏覽

Why Initialize C   Static Member Variables Outside the Class Declaration?

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