※ 引述《anoymouse (没有暱称)》之铭言:
: const int fun1()
: int fun2(const int x)
: 为何都是没有意义的? 网络上说如果输入参数采用“值传递”,由于函数将自动产生临时
: 变量用于复制该参数,该输入参数本来就无需保护,所以不要加const
: 复制一个临时的变量跟保护有什么关系?
: 第一个函式不就是回传到const int的变量
: 第二个是传递的值不能改变 不是吗 ?
确实是没有意义的 因为都是"值传递"
const在function prototype的用途是让function跟caller能确保哪些不会被对方改掉
而值传递的部份 双方各自拥有一份资料 本来就不用怕被对方改掉
第一个代表这个function回传一个const int
对caller来说 仍可以用一个non-const int接
就只是把const变量复制到一个non-const变量
而对function来说 回传值只是它内部的东西的复本 已经与它无关
所以这边const等于是没用的
第二个代表进到fun2之后x是个const int
caller并不需要知道这个 因为值传递的时候参数本来就不会被改掉
function内部也没必要保证这个 因为x的scope只在fun2中 没别人会担心x被改掉
而且要是写一写发现真要改x的值 把const去掉 对caller也不会有任何影响
所以这边const也等于是没用的
所以说 const真正有用的时候是传&或*
另外 值传递会导致一次copy的事 我想这其实跟const不相关 不能混为一谈