1、 首先要認識到不存在類似於空引用(null reference)這樣的東西。引用必須要指代某個物件,因此,如果有乙個用於指代另外乙個物件的變數,但是有可能沒有這麼乙個可供指代的物件,這時就應該把這個變數宣告成指標,因為這樣就可以將它設為空值(null)了。反之,如果這個變數必須指代乙個物件,即我們將這個變數設計成不允許為空值,那麼這時基本上應該將這個變數宣告成引用。
2、 因為引用總是要指代乙個物件,c++要求引用必須初始化。
std::string& ace;
//err!
引用必須初始化
std::string sace(
「rid」);
std::string& ace= sace;
//ok!
引用ace指向sace
指標並沒有類似的限制:
std::string *ps;
//未初始化的指標,合法但具有風險!
3、 不存在空引用這個事實說明,使用引用比使用指標更高效,因為在使用引用前不需要測試它是否有效:
void
aceprint(
const
double
& db)
而與之相反,指標通常需要檢查其是否為空:
void
aceprint(
const
double
*db)
}4、 指標和引用另乙個重要不同點在於:指標可以被重新賦值用以指向另外乙個不同的物件;而引用則始終指向初始化時它所指代的物件:
std::string ace1(
「hw」);
std::string ace2(
「rid」);
std::string& race = ace1;
//race
指代ace1
std::string *pace = ace1;
//pace
指向ace1
race = ace2;
//race
依然指代ace1,但ace1的值現在是「rid」
pace = &ace2;
//pace
現在指向ace2,ace1的值不變
5、 總之,當需要考慮以下兩種情況時,應該使用指標:有可能什麼也不指向(這種情況下,我們可以把指標設為空值);需要能夠在不同時候指向不同的物件(這種情況下可以更改指標的指向)。
當我們知道總是會指向某乙個物件並且一旦指定那個物件,就不會再指向其他物件時,應該使用引用。
6、 還有一種情況應該使用引用,即當實現某些操作符的時候。最常見的例子是操作符。這個操作符通常需要返回乙個值作為(下乙個)賦值語句的賦值目標:
vector<
int> v(10);
v[5] = 10;
我們可以看到,如果操作符返回乙個指標,那麼上面最後一條語句就必須寫成:
*v[5] = 10;
這讓v看起來像是乙個關於指標的向量,而實際並非如此。因此,絕大多數情況下操作符都應該返回乙個引用。
(p.s引用是乙個現有物件的別名,用物件來初始化引用後,那麼物件的名字或引用的名字都可以用於指向該物件。人們常常將引用和指標混淆,原因大概在於c++編譯器通常採用指標的方式實現引用,但引用實際不是指標,其行為和指標並不相同。如前面所說,引用和指標存在三大區別:一是不存在空引用;二是所有引用都要初始化;三是乙個引用永遠指向用來對它初始化的那個物件。
乙個指向非常量的引用是不可以用字面值或臨時值進行初始化的:
double
&aced = 13.4;
//err
!template
<
typename
t>
void
swap(t &a, t&b)
swap(std::string(
「hello」), std::string(「, world」)); //err
!然而,乙個指向常量的引用就可以:
const
double
&aced = 13.4;
//ok
!template
<
typename
t>
t add(
const
t &a,
const
t &b)
...const
std::string &greeting = add(std:string(
「hello」), std::string(「, world」)); //ok!
當乙個指向常量的引用採用乙個字面值來初始化時,該引用實際上被設定成指向「採用該字面值初始化」的乙個臨時位置。)
C語言指標和c 引用
c 引用和c指標區別 在c和c 中,指標一般指的是某塊記憶體的位址,通過這個位址,我們可以定址到這塊記憶體 而引用是乙個變數的別名,例如我們給小明起了個外號 明明,那我們說明明的時候,就是說小明。對於指標來說,它是乙個位址,這個位址是乙個數值,那麼就意味這個數值可以為0 空指標 也可以為其他,即指標...
C語言 指標和引用的區別
指標和引用的區別 1.指標是乙個實體,而引用是乙個別名 在彙編上,引用的底層是以指標的方式實現的,定義乙個引用變數,相當於就是定義了乙個指標,然後把引用記憶體的位址寫到這個指標裡面,當通過引用變數修改它所引用的記憶體時,它先訪問了指標裡面的位址,然後在這個位址的記憶體裡面對值進行修改 2.指標可以不...
C 指標和引用
在深入介紹之前我們首先來看一下指標和引用的定義 指標和引用的區別,然後分別針對指標和引用展開討論,深入細節為何有這些差異。指標和引用的定義,下面用通俗易懂的話來概述一下 而宣告指標是可以不指向任何物件,也正是因為這個原因,使用指標之前必須做判空操作,而引用就不必。其次,引用不可以改變指向,對乙個物件...