我正在尝试将整数添加到complex<double>
,但我不能。这是代码的相关部分:
using dcomplex = std::complex<double>;
dcomplex j = dcomplex(0,1);
// dcomplex r = 1+j;//this line is not compiling
dcomplex r = 1.0+j;//ok
我理解为什么j+=1
没有编译,因为operator+=
在complex
内重载,并且没有隐式转换int->double
。但是operator+
并没有在复杂内部重载(我没有在那里找到它)。所以它在其他地方重载(在哪里?我找不到它),因为int
应该隐式转换为double
。但事实并非如此。为什么呢?
答案 0 :(得分:2)
cppreference来自std::complex::operator+
的重载
template< class T >
complex<T> operator+( const complex<T>& lhs, const complex<T>& rhs);
template< class T >
complex<T> operator+( const complex<T>& lhs, const T& rhs);
template< class T >
complex<T> operator+( const T& lhs, const complex<T>& rhs);
当类型扣除发生时,会发生冲突,因为它会将T
评估为double
和int
。由于T
不能同时生成错误。
答案 1 :(得分:0)
这是一个非成员函数,因为标量位于左侧。 (http://en.cppreference.com/w/cpp/numeric/complex/operator_arith3)。您可以将整数转换为double或j.value_type
。