operator+,-,*,/ (std::complex)
提供: cppreference.com
(1) | ||
template<class T > std::complex<T> operator+(conststd::complex<T>& lhs, conststd::complex<T>& rhs); | (C++20未満) | |
template<class T > constexprstd::complex<T> operator+(conststd::complex<T>& lhs, conststd::complex<T>& rhs); | (C++20以上) | |
(2) | ||
template<class T > std::complex<T> operator+(conststd::complex<T>& lhs, const T& rhs); | (C++20未満) | |
template<class T > constexprstd::complex<T> operator+(conststd::complex<T>& lhs, const T& rhs); | (C++20以上) | |
(3) | ||
template<class T > std::complex<T> operator+(const T& lhs, conststd::complex<T>& rhs); | (C++20未満) | |
template<class T > constexprstd::complex<T> operator+(const T& lhs, conststd::complex<T>& rhs); | (C++20以上) | |
(4) | ||
template<class T > std::complex<T> operator-(conststd::complex<T>& lhs, conststd::complex<T>& rhs); | (C++20未満) | |
template<class T > constexprstd::complex<T> operator-(conststd::complex<T>& lhs, conststd::complex<T>& rhs); | (C++20以上) | |
(5) | ||
template<class T > std::complex<T> operator-(conststd::complex<T>& lhs, const T& rhs); | (C++20未満) | |
template<class T > constexprstd::complex<T> operator-(conststd::complex<T>& lhs, const T& rhs); | (C++20以上) | |
(6) | ||
template<class T > std::complex<T> operator-(const T& lhs, conststd::complex<T>& rhs); | (C++20未満) | |
template<class T > constexprstd::complex<T> operator-(const T& lhs, conststd::complex<T>& rhs); | (C++20以上) | |
(7) | ||
template<class T > std::complex<T> operator*(conststd::complex<T>& lhs, conststd::complex<T>& rhs); | (C++20未満) | |
template<class T > constexprstd::complex<T> operator*(conststd::complex<T>& lhs, conststd::complex<T>& rhs); | (C++20以上) | |
(8) | ||
template<class T > std::complex<T> operator*(conststd::complex<T>& lhs, const T& rhs); | (C++20未満) | |
template<class T > constexprstd::complex<T> operator*(conststd::complex<T>& lhs, const T& rhs); | (C++20以上) | |
(9) | ||
template<class T > std::complex<T> operator*(const T& lhs, conststd::complex<T>& rhs); | (C++20未満) | |
template<class T > constexprstd::complex<T> operator*(const T& lhs, conststd::complex<T>& rhs); | (C++20以上) | |
(10) | ||
template<class T > std::complex<T> operator/(conststd::complex<T>& lhs, conststd::complex<T>& rhs); | (C++20未満) | |
template<class T > constexprstd::complex<T> operator/(conststd::complex<T>& lhs, conststd::complex<T>& rhs); | (C++20以上) | |
(11) | ||
template<class T > std::complex<T> operator/(conststd::complex<T>& lhs, const T& rhs); | (C++20未満) | |
template<class T > constexprstd::complex<T> operator/(conststd::complex<T>& lhs, const T& rhs); | (C++20以上) | |
(12) | ||
template<class T > std::complex<T> operator/(const T& lhs, conststd::complex<T>& rhs); | (C++20未満) | |
template<class T > constexprstd::complex<T> operator/(const T& lhs, conststd::complex<T>& rhs); | (C++20以上) | |
複素数算術および複素数とスカラーの混合算術のための二項演算子を実装します。 スカラーの引数は、その引数に等しい実部とゼロの虚部を持つ複素数として扱われます。
1-3) 引数の和を返します。
4-6)
lhs
から rhs
を引いた結果を返します。7-9) 引数を掛けます。
10-12)
lhs
を rhs
で割ります。目次 |
[編集]引数
lhs, rhs | - | 引数。 両方が複素数または片方が複素数で他方が一致する型のスカラー (float, double, longdouble) のいずれか |
[編集]戻り値
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 に含まれます) は浮動小数点のエッジケースに対するチェックを削除することによって複素数の乗除算の動作を変更します。 これはループのベクトル化に影響があります。
[編集]例
Run this code
#include <iostream>#include <complex>int main(){std::complex<double> c2(2, 0);std::complex<double> ci(0, 1); std::cout<< ci <<" + "<< c2 <<" = "<< ci+c2 <<'\n'<< ci <<" * "<< ci <<" = "<< ci*ci <<'\n'<< ci <<" + "<< c2 <<" / "<< ci <<" = "<< ci+c2/ci <<'\n'<<1<<" / "<< ci <<" = "<<1./ci <<'\n'; // std::cout << 1.f/ci; // compile error// std::cout << 1/ci; // compile error}
出力:
(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)
[編集]関連項目
2つの複素数または複素数とスカラーの複合代入 (パブリックメンバ関数) | |
複素数に単項演算子を適用します (関数テンプレート) |