看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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不相關 不能混為一談 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.43.167.234 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1417057220.A.69F.html ※ 編輯: AntaresStar (114.43.167.234), 11/27/2014 11:06:28
uranusjr: 我覺得「沒有用」和「沒有意義」是兩回事 11/27 12:47
firose: 你講超過了 複製值不會改是對的 至於有無意義是人自行判斷 11/27 14:04
AntaresStar: 就是沒有意義啊... 11/27 17:22
AntaresStar: 還是你們有想到什麼會讓它有意義的例子? 11/27 17:23
dirkc: http://ideone.com/ATsoDm 臨時想到的爛例子 11/30 18:03
dirkc: 我也覺得就程式語法而言的確是有意義的,但是不常用 11/30 18:04