来自C++ Primer第5版,它说:
int f(int){ /* can write to parameter */}
int f(const int){ /* cannot write to parameter */}
Run Code Online (Sandbox Code Playgroud)
这两个功能难以区分.但是如您所知,这两个函数在更新参数方面确实存在差异.
有人可以向我解释一下吗?
编辑
我想我没有很好地解释我的问题.我真正关心的是为什么C++不允许这两个函数同时作为不同的函数,因为它们在"是否可以写入参数"方面确实不同.直观地说,应该是!
编辑传递值
的性质实际上是通过将参数值复制到参数值来传递的.即使对于复制值为地址的引用和指针也是如此.从来电者的角度来看,无论是常量还是非常量传递给函数不会影响复制到参数(当然类型)值.复制对象时
,顶级const和低级const之间的区别很重要.更具体地说,顶级const(不是
低的const)复制对象时会被忽略,因为复制不会影响复制的对象.复制或复制的对象是否为const无关紧要.
因此对于呼叫者来说,区分它们是没有必要的.可能,从功能的角度来看,顶级const参数不会影响接口和/或功能的功能.这两个功能实际上完成了同样的事情.为什么要打扰实施两份?