- 引用是支持運(yùn)算符重載語法的基礎(chǔ)灼卢,也為函數(shù)的傳入和傳出控制提供了便利销钝。
- 拷貝構(gòu)造函數(shù)跨扮,是一種特殊的構(gòu)造函數(shù)受扳,需要用引用來實(shí)現(xiàn)從現(xiàn)有的相同類型的對象中產(chǎn)生新的對象携龟。編譯器使用拷貝構(gòu)造函數(shù)頭通過按值傳遞的方式在函數(shù)中傳遞和返回對象。
C++ 中的指針
- C和C++指針的最終要的區(qū)別在于C++是一種類型要求更強(qiáng)的語言勘高。就像
void *
而言峡蟋,這一點(diǎn)表現(xiàn)更加突出坟桅。C不允許隨便地把一個(gè)類型的指針賦給另一個(gè)類型,單允許通過void*
來實(shí)現(xiàn). - C++ 中必須顯示的進(jìn)行類型轉(zhuǎn)換蕊蝗。
C++中的引用
基本概念
- 引用(&)就像能自動地被編譯器間接引用的常量型指針仅乓。
- 通常用戶函數(shù)的參數(shù)表中和函數(shù)的返回值,但是也能獨(dú)立的使用
- 任何引用必須和儲存單元聯(lián)系匿又,訪問引用時(shí)就是訪問那個(gè)儲存單元
- 當(dāng)引用被創(chuàng)建時(shí),它必須被初始化建蹄,(指針則可以在任何時(shí)候被初始化)
- 一旦一個(gè)引用被初始化為指向一個(gè)對象碌更,它就不能改變?yōu)榱硪粋€(gè)對象的引用(指針則可以在任何時(shí)候指向另一個(gè)對象)
- 不可能有NULL的引用。必須確保引用是和一塊合法的儲存單元關(guān)聯(lián)
函數(shù)中的引用
最經(jīng)扯瓷鳎看見引用的地方是在函數(shù)的參數(shù)和返回值當(dāng)中
- 當(dāng)引用被作為函數(shù)的參數(shù)時(shí)痛单,在函數(shù)內(nèi)任何對引用的更改將對函數(shù)外的參數(shù)產(chǎn)生改變。(可以傳遞一個(gè)指針來做相同的事情劲腿,但是引用有更加清晰的語法)
- 如果從函數(shù)中返回一個(gè)引用旭绒,必須像從函數(shù)中返回一個(gè)指針一樣來對待。
- 當(dāng)函數(shù)返回時(shí)焦人,無論引用關(guān)聯(lián)的是什么都應(yīng)該存在挥吵,否則不知道指向哪一個(gè)內(nèi)存。(: 不能返回一個(gè)臨時(shí)變量花椭,以為臨時(shí)變量在函數(shù)體結(jié)束時(shí)已經(jīng)被銷毀)
int& h() {
int q;
//! return q; // Error
static int x;
return x; // Safe, x lives outside this scope
}
常量引用
1.函數(shù)的參數(shù)是一個(gè)常量引用忽匈,那么函數(shù)將不會改變參數(shù)。
指針引用
- C語言中如果想改變指針本身而不是它所指向的內(nèi)容矿辽,函數(shù)的聲明可能是這樣 void f(int **);當(dāng)傳遞它時(shí)必須取得指針的地址:
int i = 47;
int *ip = &i;
f(&ip);
int* p=0
是一種初始化結(jié)構(gòu)丹允,把指針賦值為空。