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