一、引用
1.概念
引用不是新定義乙個變數,而是給已經存在的變數取了個別名,編譯器不會為引用開闢記憶體空間,它和它引用的變數共用同一塊記憶體空間。
2.和指標區別
引用在定義時必須初始化,指標沒有要求
引用在初始化時引用乙個實體後,就不能再引用其他實體,而指標可以在任何時候指向任何乙個同型別實體
沒有null引用,但有null指標
引用自加即引用的實體增加1,指標自加即指標向後偏移乙個型別的大小
有多級指標,但是沒有多級引用
訪問實體方式不同,指標需要顯式解引用,引用編譯器自己處理
引用比指標使用起來相對更安全
二、拷貝建構函式
1.特徵
拷貝建構函式是建構函式的乙個過載形式
class
string
string
(const string& s)
:_str
(new
char
[strlen
(s._str)+1
])~string()
private
:char
* _str;
};
2.使用
int
main()
3.原因(這裡用日期類進行舉例)
拷貝建構函式的const date d會對原來的d1進行例項化,呼叫自身,但被呼叫後又例項化,再次呼叫拷貝建構函式,形成無限遞迴,所以只能引用原來的d2
拷貝建構函式為什麼要用引用傳參?
拷貝建構函式是類的六個預設成員函式之一,他是建構函式的乙個過載形式,其引數只有乙個且必須要引用傳遞,那我們不禁想問值傳遞可以嘛?下面是乙個拷貝建構函式的 讓我們來分析下 date const date d intmain 當用已存在的物件建立新物件時候,編譯器會自動呼叫拷貝建構函式完成新物件的初始化...
拷貝建構函式的引數為什麼是引用
在c 中,建構函式,拷貝建構函式,析構函式和賦值函式 賦值運算子過載 是最基本不過的需要掌握的知識。但是如果我問你 拷貝建構函式的引數為什麼必須使用引用型別?這個問題,你會怎麼回答?或許你會回答為了減少一次記憶體拷貝?很慚愧的是,我的第一感覺也是這麼回答。不好還好,我有理性這個好品質。思索一下以後,...
拷貝建構函式的引數為什麼必須是引用?
1 include2 include 3using namespace std 4class foo5 13 foo foo f ss f.ss 1417 foo operator const foo f1 1822 void test foo f2 2326 27 28int main 29 如果...