超载中的琐碎转换

时间:2013-11-14 18:48:03

标签: c++ 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;

两个重载的副本都需要进行简单的转换,为什么没有歧义呢?

1 个答案:

答案 0 :(得分:-1)

也许这张表对你有一点帮助:

<头>
从类型转换 转换为类型
类型名称 类型名称&
类型名称& 类型名称
类型名称 [ ] 类型名称 *
类型名称(参数列表) ( * type-name ) ( 参数列表 )
类型名称 常量类型名称
类型名称 易失类型名称
类型名称 * const 类型名称 *
类型名称 * volatile 类型名称 *

参考:Ref-qualifiers on member functions