重载中的琐碎转换

Trivial conversion in overloading

本文关键字:转换 重载      更新时间:2023-10-16

让我们考虑以下类:

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 只需要微不足道的转换,那么为什么没有歧义呢?

也许这张表对你有所帮助:

从类型转换 转换为文字
类型名称 类型名称 &
类型名称 & 类型名称
类型名称 [ ] 类型名称 *
类型名称 ( 参数列表 ) ( * 类型名称 ) ( 参数列表 )
类型名称 常量类型名称
类型名称 易失性类型名称
类型名称 * 常量类型名称 *
类型名称 * 易失性类型名称 *