|
||
起來晚了,不過還是要寫點給大家啊,今天告訴大家一個C++獨有的功能——引用。 為什么要叫這么怪的名字呢?來我們先看個列子: void swap(int& i, int& j) OK,這就是作為一個程序員所認知的引用?,F在,給你一個不同的角度,這可能會讓你更糊涂,那就是引用是如何實現的。典型的情況下,對象 x 的引用 i 是 x 的機器地址。但是,當程序員寫 i++ 時,編譯器產生增加 x 的代碼。更詳細的來說,編譯器用來尋找 x 的地址位并沒有被改變。C 程序員將此認為好像是 C 風格的按指針傳遞,只是句法不同 (1) 將 & 從調用者移到了被調用者處,(2)消除了*s。換句話說,C 程序員會將 i 看作為宏 (*p),而 p 就是指向 x 的指針(例如,編譯器自動地將潛在的指針解除引用;i++被改變為 (*p)++;i = 7 被自動地轉變成 *p = 7)。 很重要:請不要將引用看作為指向一個對象的奇異指針,即使引用經常是用匯編語言下的地址來實現的。引用就是對象。不是指向對象的指針,也不是對象的拷貝,就是對象。 另外一個注意的地方:引用和指針不同,一旦引用和對象綁定,它無法再被重新指向其他對象。引用本身不是一個對象(它沒有標識; 當試圖獲得引用的地址時,你將的到它的指示物的地址;記?。阂镁褪撬闹甘疚铮?。 從某種意義上來說,引用類似 int* const p 這樣的const指針(并非如 const int* p 這樣的指向常量的指針)。不管有多么類似,請不要混淆引用和指針;它們完全不同。 |