※ 引述《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不相關 不能混為一談