调用函数的歧义.隐式转换
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));
}
这段代码会导致歧义,我不知道为什么我显式转换为右值引用。
我的想法是,右值引用可以隐式转换为左值。但我不确定。请解释一下。
std::string
可以从类型为 std::string
的 rvalue 初始化。所以第二个函数是一个候选函数。
使用值和右值引用重载不是一个可行的想法。更正常的设置是具有右值引用和左值引用重载:
void f(std::string&& rref);
void f(std::string & lref); // or const&
这将涵盖所有用例。
相关文章:
- 为什么下面带有非常量转换函数的代码没有歧义?
- 如何在模板化转换运算符中消除此构造的歧义?
- 函数调用歧义(用户定义的转换和 Derived2Base 指针转换)
- C++中的重载歧义,用于自动将对象转换为"printable"格式
- 资格转换的歧义
- 在隐式转换后的智能指针上删除函数调用中的歧义
- 解决隐藏歧义的不明确用户定义转换
- 为什么我总是必须除以 49 才能得到二进制转换器 + cout 歧义的正确答案?
- 转换运算符重载歧义,编译器不同
- 如何解决转换构造函数和普通构造函数之间的歧义
- 转换 - 错误 E2015,AnsiString(char) 和 AnsiString(short) 之间的歧义
- 调用函数的歧义.隐式转换
- C++11:在按值传递参数初始化时转换构造函数和转换函数之间的歧义
- g++和clang++-删除由重载转换运算符歧义获取的指针
- 安全布尔多次转换歧义
- 当目标类有多个构造函数时,消除强制转换操作符的歧义
- 在将派生类指针转换为基类时,基类有歧义
- 歧义调用(从char*到lambda与std::string的转换)
- 运算符=与转换运算符结合时的歧义
- 转换运算符重载 - 函数歧义