名前空間
変種
操作

operator<<,>>(std::complex)

提供: cppreference.com
< cpp‎ | numeric‎ | complex
 
 
 
 
ヘッダ <complex> で定義
template <class T, class CharT, class Traits>

std::basic_ostream<CharT, Traits>&
    operator<<(std::basic_ostream<CharT, Traits>& os,

               const std::complex<T>& x);
(1)
template <class T, class CharT, class Traits>

std::basic_istream<CharT, Traits>&
    operator>>(std::basic_istream<CharT, Traits>& is,

               std::complex<T>& x);
(2)
1) 複素数を os(real,imaginary) の形式で書き込みます。
2) 複素数を is から読み込みます。 サポートされている形式は以下の通りです。
  • real
  • (real)
  • (real,imaginary)

ただし real および imaginary に対する入力は T に変換可能でなければなりません。

エラーが発生した場合は is.setstate(ios_base::failbit) が呼ばれます。

目次

[編集] 例外

ストリームのエラーが発生すると std::ios_base::failure が投げられる場合があります。

[編集] 引数

os - 文字出力ストリーム
is - 文字入力ストリーム
x - ���入または抽出する複素数

[編集] 戻り値

1) os
2) is

[編集] ノート

1) カンマは現在のロケールで小数点として使用されるかもしれないため、出力は曖昧になる場合があります。 これは std::showpoint で小数点の表示を強制すると解決可能です。
2) 入力は一連の単純な書式付き抽出で行われます。 ホワイトスペースのスキップはそれらが行うものと同じです。

[編集] 実装例

template<class T, class charT, class traits>
basic_ostream<charT, traits>& 
operator<<(basic_ostream<charT, traits>& o, const complex<T>& x) {
    basic_ostringstream<charT, traits> s;
    s.flags(o.flags());
    s.imbue(o.getloc());
    s.precision(o.precision());
    s << '(' << x.real() << "," << x.imag() << ')';
    return o << s.str();
}