C 中的静态成员变量:在类之外初始化
虽然看起来违反直觉,但 C 中静态成员变量的初始化发生在类之外该类出于几个逻辑原因。
单定义规则合规性
静态成员必须在一个翻译单元中定义,遵守单一定义规则。如果在类中允许初始化,则会导致同一变量在不同的翻译单元中有多个定义,从而违反了此规则。
示例:
考虑以下内容代码片段:
struct Gizmo { static string name = "Foo"; // Not allowed };
如果允许这种初始化,则变量名称将在包含头文件的每个翻译单元中定义,违反了单一定义规则。
允许类内初始化
虽然允许类内初始化可能看起来更直观,但仍然需要单独的定义来确保强制执行单一定义规则。因此,允许类内初始化只会增加语法,而不会提供任何实际好处。
整数值的替代
对于整数静态成员,C 允许在声明内初始化如果表达式为:
这允许使用语法快捷方式,从而更容易使用一行代码定义完整的静态成员。但是,仍然需要在单独的翻译单元中定义。
示例:
struct Gizmo { static const int count = 42; // Allowed };
在这种情况下,编译器会在类外部生成必要的定义来遵守单一定义规则。
以上是为什么 C 中的静态成员变量初始化必须在类之外进行?的详细内容。更多信息请关注PHP中文网其他相关文章!