与符号在函数声明的返回类型中是如何工作的

How does ampersand in the return type of a function declaration work?

本文关键字:何工作 工作 符号 函数 声明 返回类型      更新时间:2023-10-16

在这段代码中,为什么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("%fn", res);

    printf("%fn", ++add(res));
输出:

25.000000
27.000000

请注意,第二个输出是27,而不是26 –这是因为在printf()调用中使用了++

&操作符在声明形式中使用时,前面加一个类型,它不是指"的地址",而是指"对"的引用,这实际上是一个自动解引用的指针,禁用了指针算术。

在C语言中没有引用,所以如果你想通过引用传递或返回,你必须传递一个const指针并对其解引用以访问指向的值。c++添加引用是为了使这个概念更简单,以防止使用指针运算意外地从地址走出,并节省对指针解引用的需要。这使得使用它更容易,并产生更清晰、更可读的语法。

在这种情况下,&符号并不表示接受地址,而是表示引用。这里,f是一个以double类型的引用作为形参并返回double类型引用的函数。

您可能想要在您选择的教科书中阅读有关c++的参考资料,因为它们是该语言的非常基础的部分。