无法将整数添加到std :: complex <double>

时间:2015-10-05 20:12:29

标签: c++

我正在尝试将整数添加到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。但事实并非如此。为什么呢?

2 个答案:

答案 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评估为doubleint。由于T不能同时生成错误。

答案 1 :(得分:0)

这是一个非成员函数,因为标量位于左侧。 (http://en.cppreference.com/w/cpp/numeric/complex/operator_arith3)。您可以将整数转换为double或j.value_type