作者ric2k1 (Ric)
看板EE_DSnP
標題Re: [請益] const char* &ptr ......
時間Sun Oct 18 00:49:08 2009
: 各位好,我又來問愚昧的問題了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