首页 >后端开发 >C++ >为什么 C 中的静态成员变量初始化必须在类之外进行?

为什么 C 中的静态成员变量初始化必须在类之外进行?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-15 00:39:10532浏览

Why Must Static Member Variable Initialization in C   Occur Outside the Class?

C 中的静态成员变量:在类之外初始化

虽然看起来违反直觉,但 C 中静态成员变量的初始化发生在类之外该类出于几个逻辑原因。

单定义规则合规性

静态成员必须在一个翻译单元中定义,遵守单一定义规则。如果在类中允许初始化,则会导致同一变量在不同的翻译单元中有多个定义,从而违反了此规则。

示例:

考虑以下内容代码片段:

struct Gizmo {
  static string name = "Foo"; // Not allowed
};

如果允许这种初始化,则变量名称将在包含头文件的每个翻译单元中定义,违反了单一定义规则。

允许类内初始化

虽然允许类内初始化可能看起来更直观,但仍然需要单独的定义来确保强制执行单一定义规则。因此,允许类内初始化只会增加语法,而不会提供任何实际好处。

整数值的替代

对于整数静态成员,C 允许在声明内初始化如果表达式为:

  • 常量积分或枚举type
  • 可在编译时求值

这允许使用语法快捷方式,从而更容易使用一行代码定义完整的静态成员。但是,仍然需要在单独的翻译单元中定义。

示例:

struct Gizmo {
  static const int count = 42; // Allowed
};

在这种情况下,编译器会在类外部生成必要的定义来遵守单一定义规则。

以上是为什么 C 中的静态成员变量初始化必须在类之外进行?的详细内容。更多信息请关注PHP中文网其他相关文章!

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