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, conststd::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)

其中 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)
close