Namespaces
Variants

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

From cppreference.net
定义于头文件 <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();
}

示例

#include <complex>
#include <iostream>
int main()
{
    std::cout << std::complex<double> {3.14, 2.71} << '\n';
}

可能的输出:

(3.14,2.71)