我应该确定该函数在语法上是否正确:
int f3(int i, int j) { const int& k=i; ++i; return k; }
我已经对其进行了测试,并且可以使用我的主要功能进行编译。
我不明白为什么会这样。
当然可以通过调用函数f3
在新的存储空间中创建变量i
和j
的副本并设置const int& k=i
来设置新创建的k
与复制的i
的存储空间完全相同,因此任何更改,即增量++i
都将导致++k
鉴于它已设置为const
非常感谢您的帮助
答案 0 :(得分:27)
++i
的增量将导致++k
,因为设置为const
是不可能的
那是个误会。
您不能通过k
更改对象的值,但是仍然可以通过其他方式更改。换句话说,不允许++k
,但仍然允许++i
,这将间接修改k
的值。
这是来自非计算机世界的比喻。
您可能会透过商店的橱窗浏览并看到里面的东西,但是您将无法更改商店里面的东西。但是,位于商店内部的员工可以更改商店的内容。您将看到从
外。您拥有const
访问权限或查看对商店的访问权限,而员工没有const
访问权限或更改了对商店的访问权限。