Wrapper
2 つのテンプレート化された代入演算子のオーバーロードによって区別される単純な struct があります。
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
は、上記の非 const テンプレート割り当て演算子のオーバーロードを使用し、数字「2」が表示されます。
私を困惑させるのはこれです:私が and を宣言するc
とd
、
Wrapper<float> c;
const Wrapper<float> d;
c = d;
および assign d
toc
の場合、2 つの代入演算子のオーバーロードはどちらも使用されず、出力は表示されません。そのため、デフォルトのコピー代入演算子が呼び出されます。const オーバーロードされた代入演算子を使用d
しないように代入するのはなぜですか? または代わりに、代入でデフォルトのコピー代入演算子を使用しないc
のはなぜですか?b
a