Rıf*_*ran 4 c++ rvalue-reference
void f(int & i){
cout << "l-value-ref" << endl;
}
void f(int && i){
cout << "r-value-ref" << endl;
}
Run Code Online (Sandbox Code Playgroud)
假设上面的代码,我们有一个重载函数,它分别采用l值引用和r值引用参数.
int x = 5;
f(x);
f(5);
const int j = 9;
f(j);
Run Code Online (Sandbox Code Playgroud)
当我使用const int j = 9编译器时会出现歧义错误.我怎么解决这个问题?
您的编译器错误(如果确实是您提到的错误)会产生误导.这里真正错误的是,尝试将const int参数传递给任何函数都会丢弃const限定符,这是不允许的.您可以通过将签名更改为const int&/ const int&&(注意const int&&仍然不能使用const int参数)或通过为const参数添加另一个重载来解决它,具体取决于您想要实现的目标.
基本上你必须做出的选择是"我需要一个需要能够修改传递的引用的版本"(然后是2个版本)和"我永远不会修改传递的引用"(只是const int&版本).