首页 > 后端开发 > C++ > 为什么 C 静态成员变量在类定义之外初始化?

为什么 C 静态成员变量在类定义之外初始化?

DDD
发布: 2024-12-03 18:11:23
原创
407 人浏览过

Why are C   Static Member Variables Initialized Outside the Class Definition?

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板