我目前正在进行递归,并且想知道参考参数是否可以被改变并且在函数内给出不同的值,并且当递归地返回到相同的函数时,值会改变。这是我的问题,因为它没有编译。 这是一个例子:
bool findnum_recur (int wanted, int & num)
{
// if i want to increment num and call the function recursively
/*like this : */
findnum_recur (wanted, num+1);
// its giving me error, why and is there an alternative way
}
答案 0 :(得分:4)
不是这种情况。 num+1
是一个右值,对非const
个对象的引用不会绑定到右值。
将递归调用更改为:
int new_num=num+1;
findnum_recur (wanted, new_num);
这没关系。递归调用中的引用没有什么特别或神秘的东西。在这方面,参考参数与任何其他参数的工作方式没有区别。
或者,您可以将递归函数更改为:
bool findnum_recur (int wanted, const int & num)
,这将绑定到rvalue参数。
答案 1 :(得分:2)
findnum_recur(wanted, ++num);
左值参考不能绑定到+
返回的右值。
答案 2 :(得分:0)
参考参数必须引用变量。 num+1
不是变量,它是错误消息的来源。
在递归函数中使用引用参数非常好;如果你给出了你想要完成的任何暗示,那么你可以在这里帮助你。