我已经读过以下代码无效并且应该发出错误:
double rates[5] = {88.99, 100.12, 59.45, 183.11, 340.5};
const double locked[4] = {0.08, 0.075, 0.0725, 0.07};
double * pnc = rates; // valid
pnc = locked; // not valid
pnc = &rates[3]; // valid
pnc
是指针加倍,用户无法通过它更改数据。虽然,我编译了程序添加这段代码:
printf("%f\n", *pnc);
*pnc = 1000.0;
printf("%f\n", *pnc);
Visual Studio社区给了我警告C4090(不同的' const'限定符),但执行没有问题。当我运行程序时,输出如下所示:
0.080000
1000.000000
为什么即使必须禁止它也能这样做?
答案 0 :(得分:1)
const限定符只是为了防止编译(或者至少创建一个警告),如果dev修改了一个在程序逻辑中应该是常量的元素。事实上,一旦编译完成,几乎在所有情况下,const或非const,生成的程序都是相同的。
这里有一个警告,但因为你是一个疯狂的开发者(我们有时都疯了),你忽略了它。
如果你愿意,你甚至可以做
pnc = (double *)locked;
更新:您可以查看此链接以获取更多详细信息。它也谈论C ++,但它非常有趣:) http://www.gotw.ca/gotw/081.htm