引用和指針的區別

引用和指針有如下三種區別:1 引用必須在聲明時初始化,而指針不用;

    2 對於NULL不能引用,而指針可以指向NULL

    3 引用一旦聲明,引用的對象不能改變(但對象的值可以改變);而指針可以隨時改變指向的對象。

    引用能做到的,指針也可以,但指針更危險;

    1)引用被創建的同時必須被初始化(指針則可以在任何時候被初始化)。

    2)不能有NULL引用,引用必須與合法的存儲單元關聯(指針則可以是NULL)。

    3)一旦引用被初始化,就不能改變引用的關係(指針則可以隨時改變所指的對象)。

    從上面的區別看,引用比指針安全。從編譯器的角度看,引用僅僅是一個更爲安全的指針。正是因爲指針非常靈活,導致指針在編程時出錯的可能性也很大,可以這樣說指針是C++中最危險的。爲了在不犧牲性能的情況下,更安全的利用指針特性,C++引入了引用。

    從上面的區別可看出,兩者的區別全部表現爲對指針的一個靈活特性進行限制,如初始化、合法地址、重新賦值的限制。

    下面逐條給予更多的解釋:

    12) 爲確保引用對象的有效性。引用變量聲明是必須初始化,卻語言儘可能限制引用變量的有效性。但是注意:語言僅是儘可能保證,並不能完全保證引用時刻有效。因爲編譯器做不到這點。如:a) 引用對象被無意析構;常表現爲返回臨時變量的引用;引用變量的生存期比引用變量短; b)用於初始化引用變量的變量並未被構造,這主要是因爲使用指針初始化引用變量導致,如int* p=NULL int& temp = *p  上面 的語句是有效的,但是引用變量是無效的。

    上面的解釋說明了,引用雖然是安全的指針,但是並非絕對安全。引用使用不當,同樣是致命的。根據C++標準,無效引用將產生不確定行爲。可能是出於性能方面的考慮,標準並未提供判斷引用時候有效的辦法(據通過假定引用變量時刻有效,減少判斷有效性的性能損失)。

    3) 引用變量的值不能改變。這個假定同樣是爲減少指針的誤用。也就是說使用引用變量時不必擔心出現同一個引用變量前後所指向的實際對象發生改變的可能。

    那什麼時候使用引用呢?

    理論上,除下面兩種情況外,都可以使用引用來替代指針(引用更安全)

    一是你考慮到存在不指向任何對象的可能,在這種情況下,你能夠設置指針爲空;

    二是你需要能夠在不同的時刻指向不同的對象,在這種情況下,你能改變指針的指向。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章