作者littleshan (我要加入剑道社!)
看板C_and_CPP
标题Re: [语法] about "&"
时间Wed May 3 19:29:52 2006
※ 引述《okwan (okwan)》之铭言:
: : reference得限制比指标多不像指标弹性那麽大~~~
: : 他是很专情的指到哪个人就不能换了~~~
: : 指标的话是可以乱指的~~~喜欢哪个人就指它~~
: : 它比指标单纯没指标那麽复杂~~
: : 应该就是这样@@"~~~
: 对不起,这样的解释有一些不清楚.
: C++里的指标与Reference是完全不一样的东西.
: Reference没有指向谁的问题,因为它只是一个变数的"别名".指标才有"指"到某一个位置.
你们的意思应该是一样的吧
在同一个 scope 中 reference 的确就是个别名
但 reference 本身的确是用 pointer 来实作的
以这个例子来说
void foo(const string& str)
{
// ...
}
void bar()
{
foo("hello world");
}
这是合法的
但在 foo 里面 宣告为 refernece 的 str 是谁的别名呢?
事实上这边 compiler 会在呼叫 foo() 的地方产生一个 string 暂时变数
然後让 str 成为暂时变数的别名
不过这个暂时变数本来就没有名字了 用「别名」反而很奇怪
倒不如说 str 指向一个暂时变数
而你在使用 str 时
compiler 会自动帮你 dereference
实际上 bar() 在呼叫 foo() 时
的确是把暂时变数的位址传给 foo()
甚至如果你霸王硬上弓
也可以让 reference 指向 NULL:
string& str = *(string*)NULL;
当然这麽做一点好处也没有
我只是在说明 reference 其实本身就是 pointer
只是使用的语法不同罢了
: 一堆人的履历都写会C++, 我每次都问应徵者CALL BY VALUE, CALL BY ADDRESS,
: 与CALL BY REFERENCE是怎麽运作, 结果有七成的人都讲不出来.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.62.3.35
1F:推 pikachu123:关於reference是不是指标的问题~~~ 05/03 20:00
2F:→ pikachu123:看本是说A reference is an implicit pointer that is 05/03 20:00
3F:→ pikachu123:automatically deference~照课本说他应该是pointer 05/03 20:01
4F:→ pikachu123:但是跟pointer又不一样~okwan大大跟我说reference 05/03 20:04
5F:推 pikachu123:没有指向谁的问题~跟课本讲得矛盾到~这让我很困惑~~ 05/03 20:07
6F:推 littleshan:我会比较赞同课本的说法 05/03 23:52
7F:推 okwan:但是课本也会提醒,reference不可以当成pointer来使用 05/04 08:34