J. *_*Doe 8 c++ overload-resolution move-semantics c++11
#include <string>
void f(std::string&& rref){
}
void f(std::string s){
}
int main() {
std::string s = "s";
f(std::move(s));
}
Run Code Online (Sandbox Code Playgroud)
这段代码引起歧义,我不知道为什么,我可能会明确转换为右值引用.
我的想法是rvalue引用可以隐式转换为lvalue.但我不确定.请解释.
std::string可以从类型的右值初始化std::string 。所以第二个函数是一个候选函数。
具有值和右值引用重载不是一个可行的想法。更正常的设置是具有右值引用和左值引用重载:
void f(std::string&& rref);
void f(std::string & lref); // or const&
Run Code Online (Sandbox Code Playgroud)
这将涵盖所有用例。