[問題] 回傳Reference的用意

看板C_and_CPP作者 (Arim5566)時間16年前 (2009/11/13 14:21), 編輯推噓6(6012)
留言18則, 6人參與, 最新討論串1/1
最近開始看介紹指標的書 我首先想問的是,int & a,他的資料型態是int ,還是int& ?我覺得是int,畢竟a只是 某個int變數的別名 再來就是 struct says { ...... }; int main() { says x; ........ calls(x); ...... } says &calls(says & ref) { says newobj; newobj=ref; //在這邊,newobj也會跟x在同一個位址上?? .......... //修改newobj的值 return newobj; } 書上特別強調說不可回傳reference的區域變數,因為calls結束時newobj已經被回收掉了 可是我的想法是,newobj本身就不是x的別名同時也不是ref的別名,當然沒有辦法改變x 的值(除非他這樣寫says& newobj=ref),為什麼書上要特別強調這一點呢? 還有就是..我剛剛做了測試 says &calls(says & ref) { says x; says newobj; newobj=ref; .......... return x; } 所要回傳的應該是says &; 但是我回傳的僅是says 請問為什麼compile還是可以過呢? 還是因為says&的資料型態就是says?只是別名而已? 還有請問回傳reference的用意何在呢? 懇請指教,謝謝^^ -- ~宅男的四個徵兆~ ∠□ ○ ! * \○/ ★    (○ ? ╦╦└□ " ○□═ □   □> ║║√√ ╦══╦ ∥    |\ 一回家就上PTT 每天想正妹 以當好人為樂 忘記正妹虧欠自己 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.172.247.99

11/13 14:32, , 1F
推簽名檔
11/13 14:32, 1F

11/13 15:41, , 2F
其實ref在底層而言,其實就是指標
11/13 15:41, 2F

11/13 15:41, , 3F
只是在我們使用的上層來看看不出來而已
11/13 15:41, 3F

11/13 15:41, , 4F
換句話說,指標指到一塊區域變數時,當變數消失
11/13 15:41, 4F

11/13 15:42, , 5F
所指到的東西將會變成沒有意義
11/13 15:42, 5F

11/13 15:42, , 6F
相對的,ref也是一樣的意思
11/13 15:42, 6F

11/13 15:42, , 7F
只是他把指標包起來,讓你看不出來他是指標而已
11/13 15:42, 7F

11/13 20:52, , 8F
那請問有+&也算是一種資料型態嗎?
11/13 20:52, 8F

11/13 20:55, , 9F
沒看過「+&」這個東西...
11/13 20:55, 9F

11/13 20:55, , 10F
不過「&」這個部份我不清楚算不算是一種資料型態
11/13 20:55, 10F

11/13 20:56, , 11F
(reference to someType)當然是一種type
11/13 20:56, 11F

11/13 21:03, , 12F
那如果是一種資料型態的話 我最後一段為什麼可以compile呢?
11/13 21:03, 12F

11/13 21:27, , 13F
compile是檢查文法(語法?),這樣寫沒錯
11/13 21:27, 13F

11/13 21:27, , 14F
但是會有 dangling reference
11/13 21:27, 14F

11/13 21:29, , 15F
資料型態沒有想像中那麼重要,注意底層運作是傳什麼值
11/13 21:29, 15F

11/13 21:30, , 16F
就好了,像C也沒C++檢查的這麼嚴格。當作別名這點沒有錯
11/13 21:30, 16F

11/15 09:16, , 17F
因為傳回的 reference 可能是有效的,譬如 global object
11/15 09:16, 17F

11/15 09:17, , 18F
或是 object 內部的 data member。
11/15 09:17, 18F
文章代碼(AID): #1A_Fi6Iv (C_and_CPP)