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