命名空间
变体
操作

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)