看板 EE_DSnP 關於我們 聯絡資訊
: 各位好,我又來問愚昧的問題了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
a3785lexx:恩其實我最疑惑的是為甚麼const char & 可以 10/23 11:59
a3785lexx:可是const char* &卻不行 10/23 12:00
a3785lexx:但是看到老師最後註明的const int == int const我就了了 10/23 12:00
a3785lexx:感謝教授^^ 10/23 12:04