我在 C++ 类中有一个递归函数,如下所示:
Class myClass{
private:
static const int MAX_ALPHA = 1000;
static const int MAX_BETA = -1000;
public:
void startSearch();
int search(int& alpha, int& beta, int h);
int value();
};
实现看起来像这样:
void Class::startSearch(){
int alpha = MAX_ALPHA;
int beta = MAX_BETA;
int h = 10;
int score = search(alpha, beta, h);
}
int search(int& alpha, int& beta, int h){
if(h == 0){
return value();
}
//do some stuff
int score = search(-beta, -alpha, h-1); // ERROR HERE
//do some more stuff
return score;
}
我很困惑为什么当我调用 search() 函数时编译器会给我一个错误。它说:“错误:从类型右值对类型 'int&' 的非常量引用进行无效初始化int'”。当我不通过引用传递时,问题就消失了 - 但是,我想通过引用传递。
感谢任何帮助,如果需要,我也很乐意提供有关该问题的更多信息。谢谢!
最佳答案
请注意,operator-
返回的结果是右值;所以 -beta
和 -alpha
都是右值,然后不能绑定(bind)到 int
的左值引用,即 int&
.
您可以改为传递左值;如果您不想更改函数的参数类型(并且参数应该被修改为按引用传递)。例如
int search(int& alpha, int& beta, int h){
if(h == 0){
return value();
}
//do some stuff
alhpa = -alpha;
beta = -beta;
int score = search(beta, alpha, h-1);
//do some more stuff
return score;
}
关于c++ - "invalid initialization of non-const reference of type ‘int&’ 来自类型为 ‘int’ 的右值 ": Recursive pass-by-reference function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48513183/