无法将整数添加到标准::复杂<double>

Cannot add integer to std::complex<double>

本文关键字:复杂 gt lt double 标准 整数 添加      更新时间:2023-10-16

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

来自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不能同时存在,所以会产生错误

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