作者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