#include <string>
void f(std::string&& rref){
}
void f(std::string s){
}
int main() {
std::string s = "s";
f(std::move(s));
}
此代码导致含糊不清,我不知道为什么我可能会明确转换为 rvalue 引用。
我的想法是 rvalue 引用可以隐式转换为 lvalue 。 但我不确定。请解释一下。
答案 0 :(得分:4)
std::string
可以从std::string
类型的右值初始化。所以第二个功能是候选人。
拥有值和rvalue-reference重载是不可行的。更正常的设置是使用rvalue-reference和lvalue-reference重载:
void f(std::string&& rref);
void f(std::string & lref); // or const&
这将涵盖所有用例。