從之前的部落格中有提到,c++有兩種特性
return by value and return by reference
一種是返回值,一種是返回引用
並且,在一般情況下,傳引用比傳值效率更高。
先說說引用是什麼,引用用的是&符號,&符號既可以用來當引用,也可以用來當取位址符,只不過使用方法不同。
引用的本質是別名。
引用的基本使用方法是
int b = 1;int & a = b;
此時a就是b的引用,也就是b的別名,那可能會發現乙個問題,我為什麼不直接用b,而去特意建立乙個別名去使用b呢。
這裡去思考一下typedef的作用就知道了。
我們可以用它來接收返回值,並且建立引用
inline complex&__doaml (complex* ths, const complex&r)
傳遞者是*ths,是乙個「實體」,而接收者是 complex& , 也就是乙個引用,其實這裡也可以直接接收值,但如果之後還要使用*ths,這裡的用引用接收之後使用,效率會快上很多。
(可以把這整個函式想象成返回了乙個 *ths 的引用)
引用和指標是差不多的,因為
t& ... = t* const ... 指標無法改變
const t& ... = const t* const ... 指標無法改變,指標指向的值也無法改變
所以引用就是乙個不能改變指向的指標,傳遞的也是位址。
並且引用能夠解決 派生類切割問題。
比如說有兩個類
classperson ;
class student: public
person ;
...void
printattribute(person p)
...//
假設student s;
printattribute(s);
當派生類物件s 傳入到 printattribute()裡去後,會切割掉自己原本有的屬性,變成乙個原原本本的基類,此時將沒有classid這個屬性。
如果傳的是引用,則可以解決這個問題。
void printattribute(const person&p)
這樣 p 的行為就和傳入到函式的真實型別一致了。
C 引用小結
引用的本質就是給同乙個記憶體空間起不同的名字 include using namespace std int main 引用必須要進行初始化 include using namespace std 引用的基本基本知識 void myswap int a int b int main 這種函式是萬萬要...
c 引用小結
在c 中引用方式為 int c a 引用的本質為 int const c a 因此c本質是個指標常量,且其指標指向不可變。因此在有些需要傳遞某種資料型別的指標時,可以用引用的方式傳遞。引用的第二種方式,就是系統會自動對引用變數進行解引用取值操作 例如 int c a c 100 c 100int c...
C 引用的小結
一 引用的概念 例如 point pt1 10,10 point pt2 pt1 定義了pt2為pt1的引用。通過這樣的定義,pt1和pt2表示同一物件。需要特別強調的是引用並不產生物件的副本,僅僅是物件的同義詞。因此,當下面的語句執行後 pt1.offset 12,12 pt1和pt2都具有 12...