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)(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)