首页 >后端开发 >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