为什么`const int&k = i; ++ i; `可能吗?

时间:2019-03-26 22:27:51

标签: c++ syntax reference const

我应该确定该函数在语法上是否正确:

int f3(int i, int j) { const int& k=i; ++i; return k; }

我已经对其进行了测试,并且可以使用我的主要功能进行编译。

我不明白为什么会这样。

当然可以通过调用函数f3在新的存储空间中创建变量ij的副本并设置const int& k=i来设置新创建的k与复制的i的存储空间完全相同,因此任何更改,即增量++i都将导致++k鉴于它已设置为const

非常感谢您的帮助

1 个答案:

答案 0 :(得分:27)

  

++i的增量将导致++k,因为设置为const是不可能的

那是个误会。

您不能通过k更改对象的值,但是仍然可以通过其他方式更改。换句话说,不允许++k,但仍然允许++i,这将间接修改k的值。

这是来自非计算机世界的比喻。

您可能会透过商店的橱窗浏览并看到里面的东西,但是您将无法更改商店里面的东西。但是,位于商店内部的员工可以更改商店的内容。您将看到从 外。您拥有const访问权限或查看对商店的访问权限,而员工没有const访问权限或更改了对商店的访问权限。