重载中的琐碎转换
Trivial conversion in overloading
让我们考虑以下类:
struct T {
T() {}
T(T&) {cout << "1";}
T(const T&) {cout << "2";}
};
为什么T::T(T&)
在以下初始化中匹配得比T::T(const T&)
更好:
T a;
T b = a;
两个重载的复制 ctor 只需要微不足道的转换,那么为什么没有歧义呢?
也许这张表对你有所帮助:
从类型转换 | 转换为文字 |
---|---|
类型名称 | 类型名称 & |
类型名称 & | 类型名称 |
类型名称 [ ] | 类型名称 * |
类型名称 ( 参数列表 ) | ( * 类型名称 ) ( 参数列表 ) |
类型名称 | 常量类型名称 |
类型名称 | 易失性类型名称 |
类型名称 * | 常量类型名称 * |
类型名称 * | 易失性类型名称 * |
相关文章:
- 构造函数和转换运算符之间的重载解析
- 如何在C++中正确重载运算符转换字符*?
- MSVC 错误:4 个重载中的任何一个都无法转换所有参数类型
- C++:从重载函数转换为 std::function
- 为什么选择转换运算符的重载?
- C++stoi:这两个重载都无法转换所有参数类型
- 为什么这个涉及重载运算符和隐式转换的C++表达式是不明确的
- C++ 函数重载不明确,没有自动类型转换
- C++ 运算符重载转换
- 派生类 插入和提取运算符重载以及基类与派生类之间的强制转换
- unordered_set使用重载运算符=设置转换
- C++:使用重载而不是动态强制转换通过基选择派生类
- 具有重载类型转换运算符的函数对象崩溃
- 类型转换运算符重载与 as 非成员函数
- 模板化转换运算符的重载解析
- 类型转换重载
- 转换重载函数是不明确的
- 联合上的类型转换重载而不重载 +=
- C++类型转换重载
- c++的强制转换重载等价