我是 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 但定义中没有 const。所以就这样做:
const int B::b = 20;
关于c++ - 为什么要在结构内部初始化 const 静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44683620/