在這段代碼中,爲什麼f()被聲明爲「double & f(...」?它是什麼意思,它是如何工作的?我甚至不知道如何找到我的答案問題,請幫助。函數聲明的返回類型中的&符號是如何工作的?
double a = 1, b = 2;
double & f (double & d) {
d = 4;
return b;
}
我知道&符號意味着變量或函數的地址,但我不明白爲什麼它將使意義,把它寫,當你聲明一個函數。
在這段代碼中,爲什麼f()被聲明爲「double & f(...」?它是什麼意思,它是如何工作的?我甚至不知道如何找到我的答案問題,請幫助。函數聲明的返回類型中的&符號是如何工作的?
double a = 1, b = 2;
double & f (double & d) {
d = 4;
return b;
}
我知道&符號意味着變量或函數的地址,但我不明白爲什麼它將使意義,把它寫,當你聲明一個函數。
當在聲明表單中使用&
運算符時,前面帶有一個類型,它不是指「地址」,而是「引用」,它本質上是一個自動解除引用的指針,禁用了指針運算。
C中沒有引用,所以如果你想通過引用傳遞或返回,你必須傳遞一個const指針並將其解引用以訪問指向的值。 C++增加了引用,使得這個概念變得更容易,以防止用指針算術意外走出地址,並且保存引用指針的引用。這使得使用它變得更容易,併產生更清晰和更可讀的語法。
在這種情況下,&符號而不是表示取一個地址,但它表示一個引用。這裏,f
是一個函數,它引用double作爲參數,並返回一個參考翻倍。
您可能想閱讀您選擇的教科書中有關C++的參考資料,因爲它們是該語言的一個非常基本的部分。
考慮這兩個功能: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()
調用中使用的++
的。
否。您的案例中的&符號(在該上下文中)表示參考。 – 2013-02-27 07:51:36
此外,&符號表示在此代碼段中的* every *外觀中的引用。 – WhozCraig 2013-02-27 07:53:35
順便說一下,標題包括單詞「這個功能」或「這個代碼」幾乎沒有用。想想那些有類似問題並希望在SO中找到它的未來用戶 - 就像你無法找到你正在尋找的東西一樣。當他們所擁有的問題最好被描述爲「符合回報類型」或類似術語時,他們不太可能搜索「此功能」。 – jogojapan 2013-02-27 07:57:40