调用函数的歧义。隐式转换?
Ambiguity in calling function. Implicit conversion?
#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。
但我不确定。请解释。
std::string
可以从 std::string
类型的右值初始化。所以第二个函数是候选
有值和 rvalue-reference 重载不是一个可行的想法。更正常的设置是 rvalue-reference 和 lvalue-reference 重载:
void f(std::string&& rref);
void f(std::string & lref); // or const&
这将涵盖所有用例。
#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。 但我不确定。请解释。
std::string
可以从 std::string
类型的右值初始化。所以第二个函数是候选
有值和 rvalue-reference 重载不是一个可行的想法。更正常的设置是 rvalue-reference 和 lvalue-reference 重载:
void f(std::string&& rref);
void f(std::string & lref); // or const&
这将涵盖所有用例。