C 中的Const std::string 靜態資料成員:揭開內聯變數與外部定義
在物件導向程式設計領域,聲明const std::string 類型的靜態資料成員可能會帶來挑戰。本文深入探討了定義此類成員的複雜性,探索替代方法及其意義。
內聯變數:A C 17 創新
隨著C 17 的出現,內嵌變數變數的出現是為了解決在類別定義中初始化非整數類型的靜態資料成員的問題。內聯變數在類別定義中使用關鍵字「inline」定義,允許直接初始化:
class A { private: inline static const string RECTANGLE = "rectangle"; };
透過利用內聯變量,您可以在類別定義中定義靜態常數,而不會違反語言限制。
外部定義:C 17 之前的方法
C 之前17、定義 const std::string 類型的靜態資料成員需要替代策略。靜態成員是在類別定義中聲明的,但其初始化被推遲到外部來源,如下所示:
// In the declaration phase class A { private: static const string RECTANGLE; }; // In an implementation file const string A::RECTANGLE = "rectangle";
此方法確保靜態資料成員在類別定義之外定義,遵循語言
靜態資料成員的初始化限制
至關重要請注意,C 限制可以在類別定義中初始化為靜態資料成員的類型。只有整數和枚舉可以在類別定義中直接初始化。對於其他類型,包括 std::string,外部定義是必要的。
избегать #define 指令
不建議使用 #define 指令來規避上述限制。內聯變數提供了更乾淨、更符合標準的解決方案。它們避免了全域資料污染的陷阱並確保類型安全。
透過擁抱內聯變數或外部定義,您可以在 C 中定義 const std::string 類型的靜態資料成員。這些技術使您能夠建立符合語言標準的封裝且一致的資料結構。
以上是如何在 C 中正確初始化 `const std::string` 靜態資料成員?的詳細內容。更多資訊請關注PHP中文網其他相關文章!