【发布时间】:2011-08-03 07:18:57
【问题描述】:
我有一个简单的结构Wrapper,以两个模板化的赋值运算符重载来区分:
template<typename T>
struct Wrapper {
Wrapper() {}
template <typename U>
Wrapper &operator=(const Wrapper<U> &rhs) {
cout << "1" << endl;
return *this;
}
template <typename U>
Wrapper &operator=(Wrapper<U> &rhs) {
cout << "2" << endl;
return *this;
}
};
然后我声明a和b:
Wrapper<float> a, b;
a = b;
将b 赋值给a 将使用上面的非常量模板赋值运算符重载,并显示数字“2”。
让我困惑的是:如果我声明c 和d,
Wrapper<float> c;
const Wrapper<float> d;
c = d;
并将d赋值给c,两个赋值运算符重载都不用,也不显示输出;因此调用了默认的复制赋值运算符。为什么将d 分配给c 不使用提供的 const 重载赋值运算符?或者相反,为什么将b 分配给a不 使用默认的复制赋值运算符?
【问题讨论】:
标签: c++ templates assignment-operator