我是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
的内存以及为什么必须在声明中初始化它,为什么不能使用::
运算符来初始化它,就像正常的静态变量一样?
答案 0 :(得分:2)
您误读了错误。错误应该类似于“你有一个冲突的声明”,这意味着你声明它是内联const但是定义没有const。所以这样做:
const int B::b = 20;