这两个代码之间有什么区别?
1
const int ic = 2;
const int* const p3;
p3 = ⁣
2
const int ic = 2;
const int* const p3 = ⁣
1无法编译。 2确实编译。对我来说,它看起来和我们只是将常量整数的内存地址分配给指向常量整数的常量指针一样。我猜这与C ++中的初始化或约定有关。
编辑:第一个error: assignment of read-only variable 'p3'
。当它甚至没有被初始化时,我不明白为什么它是只读的。根据const规则,一旦初始化值就不能改变,但是这个值甚至没有被初始化。
答案 0 :(得分:3)
起初这可能有点令人困惑。这里有一个指向const
的{{1}}指针,因此变量本身(指针)为const int
。标记为const
的所有内容都必须在构造(创建)时在C ++中初始化。在您的第一个代码段中,您将其保留为未初始化状态,
const
这就是错误的原因。它与尝试
类似const int* const p3; // const pointer un-initialized, error here
您不能在不初始化的情况下定义const int i; // won't compile
i = 42;
。