Re: [語法] about "&"
看板C_and_CPP (C/C++)作者littleshan (我要加入劍道社!)時間18年前 (2006/05/03 19:10)推噓4(4推 0噓 3→)留言7則, 3人參與討論串1/2 (看更多)
※ 引述《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
推
05/03 20:00, , 1F
05/03 20:00, 1F
→
05/03 20:00, , 2F
05/03 20:00, 2F
→
05/03 20:01, , 3F
05/03 20:01, 3F
→
05/03 20:04, , 4F
05/03 20:04, 4F
推
05/03 20:07, , 5F
05/03 20:07, 5F
推
05/03 23:52, , 6F
05/03 23:52, 6F
推
05/04 08:34, , 7F
05/04 08:34, 7F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章