Re: [问题] const摆放位置

楼主: AntaresStar   2014-11-27 11:00:18
※ 引述《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不相关 不能混为一谈
作者: uranusjr (←這人是超級笨蛋)   2014-11-27 12:47:00
我觉得“没有用”和“没有意义”是两回事
作者: firose (guest也是也是也是也是也)   2014-11-27 14:04:00
你讲超过了 复制值不会改是对的 至于有无意义是人自行判断
楼主: AntaresStar   2014-11-27 17:22:00
就是没有意义啊...还是你们有想到什么会让它有意义的例子?
作者: dirkc (3781615)   2014-11-30 18:03:00
http://ideone.com/ATsoDm 临时想到的烂例子我也觉得就程式语法而言的确是有意义的,但是不常用

Links booklink

Contact Us: admin [ a t ] ucptt.com