与符号在函数声明的返回类型中是如何工作的
How does ampersand in the return type of a function declaration work?
在这段代码中,为什么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++的参考资料,因为它们是该语言的非常基础的部分。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 链表c++插入,所有情况都已检查,但没有任何工作
- 当 int 方法工作正常时,void 方法有何不同,或者为什么我不能调用 void 方法?