2013-02-27 58 views
13

在這段代碼中,爲什麼f()被聲明爲「double & f(...」?它是什麼意思,它是如何工作的?我甚至不知道如何找到我的答案問題,請幫助。函數聲明的返回類型中的&符號是如何工作的?

double a = 1, b = 2; 
double & f (double & d) { 
    d = 4; 
    return b; 
} 

我知道&符號意味着變量或函數的地址,但我不明白爲什麼它將使意義,把它寫,當你聲明一個函數。

+5

否。您的案例中的&符號(在該上下文中)表示參考。 – 2013-02-27 07:51:36

+2

此外,&符號表示在此代碼段中的* every *外觀中的引用。 – WhozCraig 2013-02-27 07:53:35

+2

順便說一下,標題包括單詞「這個功能」或「這個代碼」幾乎沒有用。想想那些有類似問題並希望在SO中找到它的未來用戶 - 就像你無法找到你正在尋找的東西一樣。當他們所擁有的問題最好被描述爲「符合回報類型」或類似術語時,他們不太可能搜索「此功能」。 – jogojapan 2013-02-27 07:57:40

回答

12

當在聲明表單中使用&運算符時,前面帶有一個類型,它不是指「地址」,而是「引用」,它本質上是一個自動解除引用的指針,禁用了指針運算。

C中沒有引用,所以如果你想通過引用傳遞或返回,你必須傳遞一個const指針並將其解引用以訪問指向的值。 C++增加了引用,使得這個概念變得更容易,以防止用指針算術意外走出地址,並且保存引用指針的引用。這使得使用它變得更容易,併產生更清晰和更可讀的語法。

6

在這種情況下,&符號而不是表示取一個地址,但它表示一個引用。這裏,f是一個函數,它引用double作爲參數,並返回一個參考翻倍。

您可能想閱讀您選擇的教科書中有關C++的參考資料,因爲它們是該語言的一個非常基本的部分。

20

考慮這兩個功能:power2()add()

void power2 (double& res, double x) { 
    res = x * x; 
} 

double& add (double& x) { 
    return ++x; 
} 

第一個計算的x電源並將結果保存在第一個參數,res,–它不需要歸還。

第二個返回一個引用,這意味着稍後可以爲該引用分配一個新值。

例子:

double res = 0; 

    power2(res, 5); 
    printf("%f\n", res); 


    printf("%f\n", ++add(res)); 

輸出:

25.000000 
27.000000 

請注意,第二輸出27,而不是26 –這是因爲printf()調用中使用的++的。

+3

+1爲具體例子 – jogojapan 2013-02-27 08:05:06

+0

我不想粗魯,但這個例子很難理解 – puk 2018-03-01 18:33:09

相關問題