左值引用和右值引用中的绑定错误

binding error in l-value reference and r-value reference

void f(int & i){
    cout << "l-value-ref" << endl;
}

void f(int && i){
    cout << "r-value-ref" << endl;
}

假设上面的代码,我们有一个重载函数,它分别接受 l-value-reference 和 r-value-reference 参数。

int x = 5;
f(x);
f(5);
const int j = 9;
f(j);

当我使用 const int j = 9 时,编译器给出了歧义错误。我怎么解决这个问题?

您的编译器错误(如果确实是您提到的错误)具有误导性。这里真正错误的是,尝试将 const int 参数传递给任何函数都会丢弃 const 限定符,这是不允许的。您可以通过将签名更改为 const int& / const int&&(请注意 const int&& 仍然无法使用 const int 参数)或通过添加另一个重载来解决它const 个参数,具体取决于您想要实现的目标。

基本上,您必须在 "I need one version that needs to be able to modify the passed reference"(当时有 2 个版本)和 "I will never modify the passed reference anyway"(只有 const int& 版本)之间做出选择。