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

< 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) 以 (real,imaginary) 格式写入复数到 os 。
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();
    }