l值参考和r值参考

时间:2017-02-22 12:00:56

标签: c++ rvalue-reference

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

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

假设上面的代码,我们有一个重载函数,它分别采用l值引用和r值引用参数。

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

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

1 个答案:

答案 0 :(得分:6)

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

基本上你要做的选择是在&#34;我需要一个版本,需要能够修改传递的参考&#34; (然后是2个版本)和&#34;我永远不会修改传递的参考文件&#34; (只是const int&版本。)