如果我调查<复杂>来自msvc 2008的标题,我发现每个操作符定义都使用_Other类型模板操作加倍,例如
_Myt& operator+=(const _Myt& _Right)
{ // add other complex
this->_Add(_Right);
return (*this);
}
template<class _Other> inline
_Myt& operator+=(const complex<_Other>& _Right)
{ // add other complex
this->_Add(_Right);
return (*this);
}
问题是为什么第二个定义不足以满足要求?
PS: 似乎在gcc中只有第二个定义存在,现在我不再担心了。 :)
答案 0 :(得分:3)
第一个案例还抓住了可转换到_Myt
的右侧。
class MyComplex {
// ...
public:
operator std::complex<double>() const;
operator std::complex<float>() const;
};
std::complex<double> i;
i += MyComplex(1,1); // Unambiguously uses the first form.