为什么常量静态变量应该在结构中初始化?

Why should const static variables initialised inside struct?

本文关键字:结构 初始化 常量 静态 变量 为什么      更新时间:2023-10-16

我是 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;