c++ - 为什么要在结构内部初始化 const 静态变量?

标签 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;
}

在这里, 我被迫直接在结构声明中初始化 b 的值。为什么静态变量是const类型会这样呢? 如果我尝试在 B 的范围之外定义此变量,则会抛出编译器错误,指出存在 b 的先前声明。这里当 b 的内存被实际分配时,为什么它必须在声明中初始化,为什么它不能像普通静态一样使用 :: 运算符初始化变量?

最佳答案

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

const int B::b = 20;

关于c++ - 为什么要在结构内部初始化 const 静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44683620/

相关文章:

c++ - C++ 中的上下文选择功能

c++ - vector 分配困惑

c++ - 将线性数组转换为二维矩阵

c++ - 为什么我无法通过实际的公网 IP 连接到服务器?

c++ - 当您不需要从模板继承时,如何从模板类继承?

c++ - 当您将内存地址传递给具有指针传递参数的函数时会发生什么?

c++ - 将大型单 block 单线程应用程序转换为多线程体系结构的建议?

c++ - 运行 "optimization=Enable"时停止 Visual Studio 移动我的断点

c++ - Boost Spirit - 项目构建使用 -O1 但不使用 -O2

c++ - Qt::UniqueConnection 是如何工作的?