Namespaces
Variants

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

From cppreference.net
(注:指定されたHTMLタグ内には翻訳対象となるテキストコンテンツが含まれていないため、構造はそのまま保持されています)
(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 & 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以降)
(7)
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以降)
(8)
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から)
(9)
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から)
(10)
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以降)
(11)
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以降)
(12)
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以降)

複素数演算および複素数とスカラーの混合演算に対する二項演算子を実装します。スカラー引数は、実部が引数と等しく虚部がゼロに設定された複素数として扱われます。

1-3) 引数の合計を返します。
4-6) rhs から lhs を減算した結果を返します。
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

注記

なぜなら template argument deduction は暗黙の型変換を考慮しないため、これらの演算子は整数と複素数の混合演算には使用できません。すべての場合において、スカラーの型は複素数の基底型と同じ型でなければなりません。

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)

関連項目

複素数同士または複素数とスカラーの複合代入
(公開メンバ関数)
複素数に対する単項演算子の適用
(関数テンプレート)