在这段代码中,为什么 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;
}
我知道&符号表示变量或函数的地址,但我不明白为什么在声明函数时编写它是有意义的。
考虑这两个函数: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()
。
当&
在声明形式中使用运算符时,前面有一个类型,它并不意味着“地址”而是“引用”,它本质上是一个带有禁用指针算法的自动取消引用的指针。
C 中没有引用,所以如果你想通过引用传递或返回,你必须传递一个 const 指针并取消引用它以访问指向的值。C++ 添加了引用以使这个概念更容易,以防止使用指针算术意外离开地址,并节省取消引用指针的需要。这使得使用它变得更加容易,并产生更清晰、更易读的语法。
在这种情况下,与号并不意味着获取地址,而是表示引用。这里,f
是一个函数,它将对 double 的引用作为参数并返回对 double 的引用。
您可能想在您选择的教科书中阅读有关 C++ 的参考资料,因为它们是该语言的一个非常基本的部分。