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