最終更新日時:
が更新

履歴 編集

function
<complex>

std::complex::operator-=

complex<T>& operator-=(const T& rhs);           // (1)

template <class X>
complex<T>& operator-=(const complex<X>& rhs);  // (2)

概要

複素数の減算を行う

効果

  • (1) スカラー値 rhs*this の実部から引く。*this の虚部は変わらない。
  • (2) 複素数値 rhs*this から引く。

戻り値

*this

備考

  • (1) の形式の場合、引数の型は const T& なので、引数(演算子の右オペランド)の型が T ではない場合には暗黙の型変換が適用される。
    例えば、T が規格でサポートが明示されている floatdoublelong double の場合、各種の暗黙の標準変換が(縮小変換も含めて)効くため、complex<float> から long double を引くといったこともできる。
  • (2) の形式の場合、rhs の型はクラステンプレートなので、引数そのものに暗黙の型変換が適用されることはない。
    しかし、(規格書内に明確な規定は無いが)*this から rhs を引く際には各コンポーネント間の演算となるため、やはり暗黙の型変換が適用されると考えて良いと思われる。

#include <iostream>
#include <complex>

int main()
{
  std::complex<double> c(4.0, 5.0);
  std::complex<long double> d(1.0, 2.0);
  std::cout << "c = " << c << ", d = " << d << std::endl;
  c -= d;
  std::cout << "c = " << c << ", d = " << d << std::endl;
  c -= 3;
  std::cout << "c = " << c << ", d = " << d << std::endl;
}

出力

c = (4,5), d = (1,2)
c = (3,3), d = (1,2)
c = (0,3), d = (1,2)

参照

operator= 代入する。
operator+= 複素数の加算を行う。
operator*= 複素数の乗算を行う。
operator/= 複素数の除算を行う。
operator+ 複素数の加算を行う。(非メンバ関数)
operator- 複素数の減算を行う。(非メンバ関数)
operator* 複素数の乗算を行う。(非メンバ関数)
operator/ 複素数の除算を行う。(非メンバ関数)