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

Posted

技术标签:

【中文标题】函数声明的返回类型中的 & 符号如何工作? [复制]【英文标题】:How does ampersand in the return type of a function declaration work? [duplicate] 【发布时间】:2013-02-12 22:35:27 【问题描述】:

在这段代码中,为什么 f() 被声明为 "double & f(..."我的问题。请帮忙。

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

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

【问题讨论】:

没有。在您的情况下(在那种情况下)的&符号表示引用。 进一步的&符号表示此代码 sn-p 中每个出现的引用。 顺便说一句,包含“此功能”或“此代码”字样的标题几乎没有用处。想想未来的用户,他们有类似的问题并希望在 SO 中找到它——就像你找不到你要找的东西一样。当他们遇到的问题被最好地描述为“返回类型中的与号”或类似时,他们不太可能搜索“此函数”。 @jogojapan 已更改标题,感谢您的建议。 【参考方案1】:

在这种情况下,与号表示获取地址,但它表示引用。这里,f 是一个函数,它将对 double 的引用作为参数并返回对 double 的引用。

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

【讨论】:

【参考方案2】:

& 运算符用于声明形式时,其前面的类型不是“地址”而是“引用”,它本质上是一个禁用指针算法的自动取消引用指针。

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

【讨论】:

【参考方案3】:

考虑这两个函数: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() 调用中使用了 ++

【讨论】:

具体例子+1 我并不是要粗鲁,但这个例子很难理解 @puk 这一点也不粗鲁。如果你提出一个让它更容易消化的想法,它会更有帮助。如果您觉得有一种更简单的方法,它根本不同,编辑此答案没有意义,您也可以发布自己的答案。 指出这无效可能会更有帮助:int& foo() return 0;

以上是关于函数声明的返回类型中的 & 符号如何工作? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

C语言中的32个关键字

C语言中的32个关键字

如何在打字稿中避免这种符号“| undefined”?

Kotlin语法总结:函数类型和高阶函数

Python中的@符号如何工作? [复制]

&符号(&)在TypeScript类型定义中的含义是什么?