EE_DSnP 板


LINE

: 各位好,我又來問愚昧的問題了XD No problem! Asking question is always welcome! : 就像標題所寫的 : 我本來很卑劣的想要用 : : const char* &ptr = _target;//_target is char* _target : : 這樣來作一個ptr擁有_target所指的位置 : 而且ptr又不佔記憶體空間又不會怕他去改到*_target的值 上課有說, type definition 請從右邊讀過來, 所以: const char* &ptr 的意思是 --- ptr 是一個 reference variable, 它的本尊是一個 pointer 指到 const char. 而你想要的: >> 這樣來作一個ptr擁有_target所指的位置 >> 而且ptr又不佔記憶體空間 ... &ptr = _target; 是 OK 的, 接下來: >> 而且ptr又不佔記憶體空間又不會怕他去改到*_target的值 const char* &ptr = _target; 是錯的, 因為你不能說原來的本尊是一個指到 "char" (可改) 的指標, 而分身卻變成一個指到 "const char" (不可改) 的指標, 我想你 confuse 的可能是: char * const &ptr = _target; 為什麼可以? 請注意一下它的不同, in general --- Type const& a = b; 是說 a 是 b 的分身, 但是在這裡加了 const 之後, a 自己本身會變成 read-only (不可改), 而且 Type 必須與 b 的 type 一致. : : 但是! : : 正義果敢的g++發現了我的伎倆並且把他打了回票了... : 我已經知道這樣寫compile絕對不會過了... : 但我還是想要知道為甚麼不能讓他過@@" 原因如上所述 : : const char* ptr = _target//target is char* _target : : 會過,*ptr不能更改,很理想,但是會佔空間 這個雖然會佔空間, 但是只佔了 4 or 8 Bytes, 應該是還好. 這個的意思是 --- ptr 將 _target 的內容 copy (=) 過來, 而這個內容就是一個指到 char 的位置. 只不過 ptr 將指到的記憶體內容 (i.e. *ptr) 設成 read-only (不可改). 不過, 請不要跟下面這個混淆: char *const ptr = _target; 這個也會過, 但是他是說 ptr 本身的內容 (i.e. 記憶體位置) 變成 read-only, 你不能在接下來的地方對 ptr 做 assign 的動作 (i.e. ptr = ....) : char* &ptr = _target//target is char* _target : : 也會過,改*ptr就是改target This is right. : const char &ptr = _target//target is char _target : : 還是會過,ptr不能改,也不佔空間 注意: const char &ptr 與 char const& ptr 是一樣的. 所以也是符合上述 Type const& a = b 的原則! : 但是...到底有甚麼道理非要不能給奸詐狡猾的 const char* & 過呢? : g++都很nice的,這其中一定有甚麼誤會吧!? You are right! 只要是 g++ 不給你過, 一定是你對 C++ 的語法有甚麼誤會~~~ : -- :



※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 114.37.107.4 : 推 anfranion:原PO想表達的是一個pointer的reference嗎@@ 10/17 00:01 : → a3785lexx:恩對啊 10/17 00:04 : → ilway25:我猜 char* const &ptr = _target; 才會過 10/17 00:29 : 推 bnsblue:樓上沒錯 10/17 00:30 : → ilway25:原來的意思是 reference to "pointer to const char" 10/17 00:30 : → bnsblue:另外若把_target變成 const char* _target也會過 10/17 00:30 : 推 bnsblue:如果照原po的寫法 修飾字"const"已經"跨進兩層"了 因此 10/17 00:40 : → bnsblue:不被允許 10/17 00:40 : 推 bnsblue:唔...好像也不太對...先忽略那個兩層的說法好了XD 10/17 01:03 : → a3785lexx:恩我的意思其實是,const char &的時候就給過 10/17 23:47 : → a3785lexx:也就是constant reference to character過了... 10/17 23:48 : → a3785lexx:const char*也過了...pointer to a constant char... 10/17 23:50 : → a3785lexx:所以是因為const char*這樣他會複製一份,原來const與否 10/17 23:51 : → a3785lexx:就不重要了,所以會過嗎? 10/17 23:51 : → a3785lexx:好像說錯了..const char&好像是reference to constchar? 10/17 23:53 補充一下: const <non-pointer-type> 與 <non-pointer-type> const 是一樣的, 像是 const int 與 int const. --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.224.42.151
1F:→ a3785lexx:恩其實我最疑惑的是為甚麼const char & 可以 10/23 11:59
2F:→ a3785lexx:可是const char* &卻不行 10/23 12:00
3F:→ a3785lexx:但是看到老師最後註明的const int == int const我就了了 10/23 12:00
4F:推 a3785lexx:感謝教授^^ 10/23 12:04







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP