首页 > 后端开发 > C++ > 为什么不能直接在 C 类中初始化静态成员和数组?

为什么不能直接在 C 类中初始化静态成员和数组?

Linda Hamilton
发布: 2024-12-08 06:08:11
原创
730 人浏览过

Why Can't I Initialize Static Members and Arrays Directly in a C   Class?

为什么我无法初始化类中的非常量静态成员或静态数组?

在 C 语言中,静态数据类中的成员不能直接在类定义中初始化,某些特定的成员除外

限制非常量静态成员初始化的原因

静态数据成员分配在程序的内存段中,并在程序的所有实例之间共享班级。 C 标准禁止它们的类内初始化,以防止在多个翻译单元中对同一变量进行多个定义。

限制静态数组初始化的原因

同样,类中的静态数组无法在类中初始化,因为数组占用连续的内存块。允许类内初始化将导致在每个翻译单元中创建同一数组的多个副本,从而导致意外行为。

Const Integral 和 Enum 类型的异常

静态常量整型和枚举类型是这些规则的例外。这些类型可以在类中初始化,因为它们被视为编译时常量,并且它们的值在编译时已知。

数组初始化的解决方法

要初始化类中的静态数组,可以使用“枚举技巧”:


enum { arrsize = 2 };
static const int c[arrsize] = { 1, 2 };

此方法声明一个枚举常量 arrsize 来确定数组大小,然后用于初始化静态数组const array c.

C 中的进化11

C 11 稍微放宽了这些限制。现在,某些类型的静态数据成员(称为“文字类型”)可以使用大括号或等于初始化程序在类中进行初始化。此外,C 11 允许使用常量表达式在类中初始化非静态数据成员。

以上是为什么不能直接在 C 类中初始化静态成员和数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

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