Namespaces
Variants

operator+,-,*,/ (std::complex)

From cppreference.net
(1)
template < class T >

std:: complex < T > operator + ( const std:: complex < T > & lhs,

const std:: complex < T > & rhs ) ;
(C++20 前)
template < class T >

constexpr std:: complex < T > operator + ( const std:: complex < T > & lhs,

const std:: complex < T > & rhs ) ;
(C++20 起)
(2)
template < class T >

std:: complex < T > operator + ( const std:: complex < T > & lhs,

const T & rhs ) ;
(C++20 前)
template < class T >

constexpr std:: complex < T > operator + ( const std:: complex < T > & lhs,

const T & rhs ) ;
(C++20 起)
(3)
template < class T >

std:: complex < T > operator + ( const T & lhs,

const std:: complex < T > & rhs ) ;
(C++20 前)
template < class T >

constexpr std:: complex < T > operator + ( const T & lhs,

const std:: complex < T > & rhs ) ;
(C++20 起)
(4)
template < class T >

std:: complex < T > operator - ( const std:: complex < T > & lhs,

const std:: complex < T > & rhs ) ;
(C++20 前)
template < class T >

constexpr std:: complex < T > operator - ( const std:: complex < T > & lhs,

const std:: complex < T > & rhs ) ;
(C++20 起)
(5)
template < class T >

std:: complex < T > operator - ( const std:: complex < T > & lhs,

const T & rhs ) ;
(C++20 前)
template < class T >

constexpr std:: complex < T > operator - ( const std:: complex < T > & lhs,

const T & rhs ) ;
(C++20 起)
(6)
template < class T >

std:: complex < T > operator - ( const T<span class="

实现复数运算及复数/标量混合运算的二元运算符。标量参数将被视为实部等于参数值、虚部为零的复数。

1-3) 返回其参数之和。
4-6) 返回从 lhs 中减去 rhs 的结果。
7-9) 对其参数执行乘法运算。
10-12) lhs 除以 rhs

目录

参数

lhs, rhs - 参数:可以是两个复数,或一个复数与一个匹配类型的标量( float , double , long double

返回值

1-3) std:: complex < T > ( lhs ) + = rhs
4-6) std:: complex < T > ( lhs ) - = rhs
7-9) std:: complex < T > ( lhs ) * = rhs
10-12) std:: complex < T > ( lhs ) / = rhs

注释

由于 模板实参推导 不考虑隐式转换,这些运算符不能用于混合整数/复数运算。在所有情况下,标量的类型必须与复数底层类型保持一致。

GCC编译选项"-fcx-limited-range"(包含在"-ffast-math"中)通过移除浮点边界情况检查来改变复数乘法/除法的行为。这会影响循环向量化。

示例

#include <complex>
#include <iostream>
int main()
{
    std::complex<double> c2(2.0, 0.0);
    std::complex<double> ci(0.0, 1.0);
    std::cout << ci << " + " << c2 << " = " << ci + c2 << '\n'
              << ci << " * " << ci << " = " << ci * ci << '\n'
              << ci << " + " << c2 << " / " << ci << " = " << ci + c2 / ci << '\n'
              << 1  << " / " << ci << " = " << 1.0 / ci << '\n';
//    std::cout << 1.0f / ci; // 编译错误
//    std::cout << 1 / ci; // 编译错误
}

输出:

(0,1) + (2,0) = (2,1)
(0,1) * (0,1) = (-1,0)
(0,1) + (2,0) / (0,1) = (0,-1)
1 / (0,1) = (0,-1)

参见

两个复数或复数与标量的复合赋值运算
(公开成员函数)
对复数应用一元运算符
(函数模板)