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

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

Barbara Streisand
發布: 2024-12-25 15:11:21
原創
793 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板