函数声明的返回类型中的&符号如何工作?

Aza*_*hli 21 c++ function function-declaration

在这段代码中,为什么f()被声明为"double&f(..."?它是什么意思,它是如何工作的?我甚至不知道谷歌要找到我的问题的答案.请帮忙.

double a = 1, b = 2;
double & f (double & d) {
    d = 4;
    return b;
}
Run Code Online (Sandbox Code Playgroud)

我知道&符号表示变量或函数的地址,但我不明白为什么在声明函数时编写它是有意义的.

kam*_*uel 24

考虑这两个功能:power2()add():

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

double& add (double& x) {
    return ++x;
}
Run Code Online (Sandbox Code Playgroud)

第一个计算功能x并将结果存储在第一个参数中res, - 它不需要返回它.

第二个返回一个引用,这意味着以后可以为该引用分配一个新值.

例:

    double res = 0;

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


    printf("%f\n", ++add(res));
Run Code Online (Sandbox Code Playgroud)

输出:

25.000000
27.000000
Run Code Online (Sandbox Code Playgroud)

请注意,第二个输出27不是26,而是因为++printf()通话中使用了.

  • +1具体例子 (4认同)
  • 我并不想变得粗鲁,但这个例子很难理解 (2认同)
  • @puk 这一点也不粗鲁。如果您提出一个使其更易于理解的想法,那会更有帮助。如果您觉得有一种更简单的方法,但这种方法根本不同,因此编辑此答案没有意义,您也可以发布自己的答案。 (2认同)

dte*_*ech 14

&运算符以声明形式使用时,前面有一个类型,它不是指"地址"而是"引用",它本质上是一个带有禁用指针算法的自动解引用指针.

C中没有引用,因此如果要通过引用传递或返回,则必须传递一个const指针并取消引用它以访问指向的值.C++添加了引用以使这个概念更容易,以防止使用指针算法意外地离开地址,并节省取消引用指针的需要.这使得使用它更加容易,并使语法更清晰,更易读.


Arn*_*rtz 6

在这种情况下,符号也并不意味着服用地址,但它表示一个参考.这里f是一个函数,它引用double作为参数并返回对double的引用.

您可能希望在您选择的教科书中阅读C++的参考资料,因为它们是该语言的一个非常基本的部分.