为什么常量静态变量应该在结构中初始化?
Why should const static variables initialised inside struct?
我是 Cpp 初学者,无法理解以下内容:
struct A{
int i;
static int j;
}
int A::j = 20;
这里 我理解了为什么静态变量不能在A
内部初始化,并且必须使用范围分辨率在A
中初始化。(即j
的点内存将被分配并初始化值)并且此处j
不会添加到sizeof(A)
中,因为它是静态变量并且对所有对象都具有静态存储。
请考虑以下脚本:
struct B{
int a;
const static int b = 20;
}
这里 我被迫直接初始化结构声明中b
的值。如果静态变量是const
类型,为什么会这样? 如果我尝试在B
的范围之外定义这个变量,那么它会抛出一个编译器错误,指出之前有一个b
的声明。在这里,当实际分配b
的内存时,为什么必须在声明中初始化它,为什么不能像普通静态变量那样使用::
运算符初始化它?
你误读了错误。错误应该是类似于"你有一个冲突的声明",这意味着你声明了它内联常量,但定义没有常量。所以只需这样做:
const int B::b = 20;
相关文章:
- 多成员Constexpr结构初始化
- 为什么用结构初始化数组需要指定结构名称
- 使用指定的初始值设定项聚合匿名结构初始化
- 不同的类或结构初始化方法之间的性能差异是什么?
- 如何在结构初始化中获取成员C++
- C++正确的结构初始化
- 使用大括号进行结构初始化
- 内部结构初始化不起作用 - C++
- 使用嵌套结构初始化并集
- 使用匿名结构初始化联合
- 结构初始化语法
- 结构初始化的 C++ 向量
- C++嵌套结构初始化和访问成员
- 结构初始化中的常量正确性
- 使用 C++ 中的自定义元素进行 Const 结构初始化
- 如何在结构C++初始化内置数组
- Visual C++ 模板类成员结构初始化语法糖
- C++结构初始化
- C 在结构初始化过程中带有内部阵列的奇怪错误
- 此C/C 的结构初始化器如何使用足够的字段工作