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