關於引用的一點點想法
今天在知乎上看到一個問題:C++中的引用就是起別名,有什麼存在的必要?
問題鏈接:
C++中既然引用就是起別名,有什麼存在的必要呢? - https://www.zhihu.com/question/266846728
之前複習備考的時候把所有的練習題重新做了一遍,發現自己一開始的時候犯了一個巨大的錯誤,就是交換值:
void swap1(int a, int b){ int temp; temp = a; a = b; b = temp;}
不記得當時是怎麼運行的,根本沒有到注意這個函數根本不能交換值……
幸好這個函數基本上沒用過……
後來學指針的時候譚浩強的書上有一個例子就是交換值:
void swap2(int *p1, int *p2){ int temp; temp = *p1; *p1 = *p2; *p2 = temp;}
這個交換值就可以交換,但是實際上還是值的傳遞。不過我當時還以為是地址的傳遞……
後面學引用的時候,譚浩強的書上寫的是可以把引用當成是起別名,一開始也覺得很雞肋,編寫以引用為形參的函數的時候也感覺很刻意的在用引用。
但是後面編的程序發現引用的好處。
最大的我覺得就是把值的傳遞變成了地址的傳遞,例子還是交換值:
void swap3(int &a, int &b){ int temp; temp = a; a = b; b = temp;}
後面發現用引用作為形參的時候,當你調用這個函數的時候,很靈活。
就比如有兩個參數a和b,想交換值。調用的時候可以是swap3(a,b),也可以是swap3(&a,&b)。
最近在把兩門課程的內容放在一起看,一個是高級程序設計,一個是計算機科學導論。簡而言之就是一個是學C++的,一個是學硬體和演算法的。看導論的時候發現,用引用的時候可以避免重複求值,起別名可以增強代碼的可讀性。
最重要的是,由於平時編代碼的時候程序都太小,所以完全看不出來代碼的質量會影響程序的運行速度。用引用,去掉重複求值,傳遞地址,很大程度上加快了運行速度。
一點點關於引用的看法,歡迎批評指正。
推薦閱讀:
※當"老經驗"遇到"新場景"——學習方式的陷阱
※從一個指針的聲明淺談和函數、數組有關的指針
※刷頂會必備 ?』?』 ? 2018年人工智慧頂會月曆
※1-12 關於改行的問詢