2013-09-28 169 views
2

讓我們假設這個代碼:通過參考參數傳遞給函數C++

void function(double &f){ 

// doing w/e here 

} 

然後在主功能:

float v; 

function(&v); 

我的編譯器說,這是不正確的,買我不真的不明白爲什麼。

關於同一主題:

void function(float *&f){ 

// doing w/e here 

} 

然後在主功能:

float *v; 

function(v+5); 

這也是不正確出於某種原因,我沒有得到任何。

所以我的問題是:爲什麼這些電話不正確?

回答

4

第一個示例不正確,因爲&v是一個指向浮點的指針。該函數期望對double的引用。指向float的指針不是對double的引用。它們是不兼容的類型。

第二個示例不正確,因爲v+5是臨時的。您無法將引用傳遞給非常量臨時表。

+0

特別注意 - 即使你用'double'替換float,指向double的指針也不是對double的引用。實際上,這些都是緊密相關的概念 - 一個引用也被稱爲自解引用指針 - 但C++將它們視爲具有不同行爲的不同類型。要爲參數指定一個指針類型,可以使用'double * f'而不是'double&f'。要傳遞引用,不需要運算符轉換爲引用,只需使用'function(v)'。 – Steve314

+0

思考它的一種方法 - 如果你使用'&'作爲操作符,它會給你一個指針。如果在一個類型中使用'&',它會在後臺使用一個指針,但是您並不直接處理指針。 – Steve314