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

为什么要在类声明之外初始化 C 静态成员变量?

Barbara Streisand
发布: 2024-12-25 15:11:21
原创
793 人浏览过

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

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