【发布时间】:2015-02-15 14:29:10
【问题描述】:
在下面的代码中p 的指针和值都是常量,但b 可以改变*p 的值。它不直观。编译器不应该至少产生一个警告吗?
int b{3}
const int* const p{&b}
//*p = 5; // correctly produces error
b = 5; // constant value is changed
cout << *p << endl; // shows 5.
【问题讨论】:
-
是什么让您觉得
int b{3}构成一个常数值?这只是一个初始化。 -
你的代码编译了吗?请从您的编辑器中复制代码并将其粘贴到此处,不要再次键入,因为它可能包含原始代码中没有的错误。
-
另外
const并不意味着该值是恒定的,这意味着编译器会阻止您更改它,除非您明确强制更改,此外p是const但@ 987654329@ 不是。 -
@iharob,这段代码在我的 ubuntu 机器上编译。