为什么要在struct中初始化const静态变量?

时间:2017-06-21 18:28:13

标签: c++

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

下面,     我被迫直接在struct声明中初始化b的值。如果静态变量属于const类型,为什么会这样呢? 如果我尝试在B范围之外定义此变量,那么它会抛出一个编译器错误,指出先前有b声明。这里实际分配b的内存以及为什么必须在声明中初始化它,为什么不能使用::运算符来初始化它,就像正常的静态变量一样?

1 个答案:

答案 0 :(得分:2)

您误读了错误。错误应该类似于“你有一个冲突的声明”,这意味着你声明它是内联const但是定义没有const。所以这样做:

const int B::b = 20;