命名空间
变体
操作

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

来自 cppreference.cn
< 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)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)