[問題] 一個referene的問題....

看板C_and_CPP (C/C++)作者 (狂風.怒浪)時間16年前 (2010/01/19 14:35), 編輯推噓0(0013)
留言13則, 3人參與, 最新討論串1/1
#include<...> ... struct sysop { char.. int .. }; const sysop & clone(sysop & sys); //prototype int main() { sysop test={ 初始化...}; ...... sysop & jolly = clone(test); //為啥這一行 我的compiler不給過 //我是用dev - c++的 請問這是出了什麼問題..... //覺的 好像應該是沒錯才對啊 , 請各位高手 解惑一下 謝謝 } const sysop & clone(sysop & sys) { sysop * ptt = new sysop; *ptt = sys; return *ptt; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.171.58.43

01/19 14:47, , 1F
既然是clone,得到的應該是可寫入的實體吧
01/19 14:47, 1F

01/19 14:47, , 2F
不過你犯的是沒有看compilation-error的訊息
01/19 14:47, 2F
47 C:\Documents and Settings\..\桌面\main.cpp invalid initialization of reference of type 'sysop&' from expression of type 'const sysop' 好像是說 錯誤的初始化 @_@? 可是我看書 他說這樣的方法 可行,但是我打上去,他就error了.... 所以我才想問一下 為什麼會錯誤...謝謝 ※ 編輯: pharaoh7 來自: 218.171.58.43 (01/19 14:53)

01/19 14:55, , 3F
同意樓上 其實錯誤訊息應該有告訴你答案了
01/19 14:55, 3F

01/19 14:56, , 4F
sysop & jolly <== 那個 & 是多餘的
01/19 14:56, 4F

01/19 15:05, , 5F
傳回型態 不是const reference 為啥這樣會錯誤啊><
01/19 15:05, 5F

01/19 15:06, , 6F
不能把jolly取 別名嗎...
01/19 15:06, 6F

01/19 15:06, , 7F
ref的初始化不能是const ref
01/19 15:06, 7F

01/19 15:07, , 8F
因為ref是可寫的, const ref是唯獨的
01/19 15:07, 8F

01/19 15:07, , 9F
^讀
01/19 15:07, 9F

01/19 15:08, , 10F
但如果main的sysop&宣告為sysop 他就是得到一份複製
01/19 15:08, 10F

01/19 15:08, , 11F
但會使得原先的const ref& 發生mem leak
01/19 15:08, 11F

01/19 15:09, , 12F
所以你可以將main的改為const sysop&,或者將clone改sysop&
01/19 15:09, 12F

01/19 15:13, , 13F
非常謝謝sunneo大的解說,看了您的解說 我懂了^^ 謝謝
01/19 15:13, 13F
文章代碼(AID): #1BLLAy6L (C_and_CPP)
文章代碼(AID): #1BLLAy6L (C_and_CPP)