命名空间
变体
操作

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

来自 cppreference.cn
< cpp‎ | 数值‎ | 复数
 
 
 
 
定义于头文件 <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
2)is 读取一个复数。支持的格式为
  • real
  • (实部)
  • (实部, 虚部)

其中 realimaginary 的输入必须可转换为 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)