gpt4 book ai didi

c++ - "invalid initialization of non-const reference of type ‘int&’ 来自类型为 ‘int’ 的右值 ": Recursive pass-by-reference function

转载 作者:太空狗 更新时间:2023-10-29 20:34:26 29 4
gpt4 key购买 nike

我在 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com