C 中引用有什麼用?

時間 2021-05-31 14:29:03

1樓:海賊王panther

一般是為了函式傳參方便,例如在交換兩個數的函式中:

(1)沒有使用引用:

void fun(int *a,int *b)int x=1,y=2;

fun(&x,&y);

(2)使用引用(此處&為引用):

void fun(int &a,int &b)函式呼叫:

int x=1,y=2;

fun(x,y);

這樣就使得函式呼叫看著更爽

2樓:Danial瓶子

既然作為C++中的乙個特性,必然有它無可替代的使用場景

場景1:別名

題主題目中舉例的確實用不上引用,但下面這種情況就需要用了

vector

>vecStr

;....

foo=

"demo:"

+vecStr[2

]+" use:"

+vecStr[2

];OpenFile

(vecStr[2

]);...

這裡多次去vector中獲取同乙個值顯然效能低下

改成下面這樣雖然有優化但第一句依然有一次拷貝構造的開銷

strings=

vecStr[2

];foo

="demo:"+s

+" use:"+s

;OpenFile(s

);更優的方法就是採用引用,連拷貝構造都省了

const

string&s

=vecStr[2

];場景2:引數傳遞

現在你有乙個物件

Foofoo

;你要把它通過引數傳遞給另乙個函式去呼叫

void

Func

(Foo

foo);

//這個定義的引數,會進行一次拷貝構造,建立乙個臨時物件傳入Func函式

//效率低下浪費資源

void

Func

(Foo

*foo

);//這是C的做法,把指標穿進去,免去呼叫拷貝建構函式建立臨時物件的消耗

//但是引入了新的問題,foo可能為NULL,因此函式裡不得不加上判斷以免出現空指標呼叫問題

void

Func

(const

Foo&

foo);

//這是C++推薦做法,和指標傳遞效能一樣,但免除了空指標的風險

//作為引數傳遞時引用和const總是一起出現的

場景3:作為函式返回值

一般使用在類成員函式返回類成員變數的場景,也就是geter

class

Foo...

}如果直接返回類物件同樣的會建立臨時物件帶來開銷,如果返回指標則呼叫者需要判斷是否為空,而返回引用則可以非常高效的直接使用

3樓:

我使用引用主要是兩個目的:

1、代替指標

如前面的同學所說,引用比指標更加直觀,a+b顯然比(*a)+(*b)更易懂

2、防止指標引起一些錯誤

引用是不可能為空的,一定確定乙個引用,它的目標是不可以被改變的如果乙個類裡面有個引用成員,它必須在構造的時候初始化,用它的時候,不必,也不能對它進行判空

4樓:王東嶽

其實是為了豐富型別,讓很多東西(尤其是傳參)看起來更科學...

比如運算子過載,你不用引用用指標就會看起來很詭異...明明過載的是T為什麼引數是T*?

學C語言有什麼用?

小麵包 自己回答 學中文有什麼用?學英語有什麼用?學鳥語有什麼用?然後就知道答案了。你是學數學的,計算機的計算能力比你強不知道多少倍,你不學會計算機語言怎麼和計算機交流讓它幫你幹活?你不學英語,怎麼和老外溝通讓他知道你想幹什麼?兄帶,乙個人的力量是很有限的,我們需要語言來把各種人,各種力量結合在一起...

學c語言有什麼用

C語言是可以算是高階語言的鼻祖,想學好需要很深的程式設計功底和理論基礎,學好了,你就開啟新世界的大門了,在linux的世界裡,縱橫馳騁,海闊憑魚躍,天高熱鳥飛 C語言當然有用了,而且很有用。C語言是一門通用計算機程式語言,廣泛應用於底層開發。C語言的設計目標是提供一種能以簡易的方式編譯 處理低階儲存...

我想知道學c語言有什麼用?

江墨 大一的c語言課結束 1.你如果好好學的話,你自己可以寫乙個俄羅斯方塊,寫乙個貪吃蛇。2.你如果不僅學的不錯,還有有小夥伴學的也不差的情況下,你們可以一邊查api,一邊做乙個有Windows介面的遊戲。三國殺,鬥地主,冰與火之歌,之類小遊戲,都不難做到。3.如果,你和幾個人志同道合的小夥伴,不僅...