首页 >后端开发 >C++ >如何在 C 中正确初始化 `const std::string` 静态数据成员?

如何在 C 中正确初始化 `const std::string` 静态数据成员?

Linda Hamilton
Linda Hamilton原创
2024-12-20 09:11:10987浏览

How Can I Properly Initialize `const std::string` Static Data Members in C  ?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn