看板 C_and_CPP 關於我們 聯絡資訊
最近開始看介紹指標的書 我首先想問的是,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
netsphere:推簽名檔 11/13 14:32
godman362:其實ref在底層而言,其實就是指標 11/13 15:41
godman362:只是在我們使用的上層來看看不出來而已 11/13 15:41
godman362:換句話說,指標指到一塊區域變數時,當變數消失 11/13 15:41
godman362:所指到的東西將會變成沒有意義 11/13 15:42
godman362:相對的,ref也是一樣的意思 11/13 15:42
godman362:只是他把指標包起來,讓你看不出來他是指標而已 11/13 15:42
Arim:那請問有+&也算是一種資料型態嗎? 11/13 20:52
godman362:沒看過「+&」這個東西... 11/13 20:55
godman362:不過「&」這個部份我不清楚算不算是一種資料型態 11/13 20:55
holymars:(reference to someType)當然是一種type 11/13 20:56
Arim:那如果是一種資料型態的話 我最後一段為什麼可以compile呢? 11/13 21:03
twotwoone:compile是檢查文法(語法?),這樣寫沒錯 11/13 21:27
twotwoone:但是會有 dangling reference 11/13 21:27
twotwoone:資料型態沒有想像中那麼重要,注意底層運作是傳什麼值 11/13 21:29
twotwoone:就好了,像C也沒C++檢查的這麼嚴格。當作別名這點沒有錯 11/13 21:30
tinlans:因為傳回的 reference 可能是有效的,譬如 global object 11/15 09:16
tinlans:或是 object 內部的 data member。 11/15 09:17