使用流迭代器时,cin不会刷新cout

时间:2013-05-04 05:32:51

标签: c++ stream

我正在尝试以下代码,

#include<iostream>
#include<string>
#include<iterator>
using namespace std;
ostream_iterator<string> oo(cout);
istream_iterator<string> ii(cin);
istream_iterator<string> eos;
int main()
{
    **oo = "Some string ..\n";
    string s1 = *ii;
    cout << s1; 
    return 0;
}

它首先要求输入,然后输出与预期相反的输出。

怎么回事?

1 个答案:

答案 0 :(得分:2)

根据标准,C ++11§24.6.1/ 1,

  

构造之后,每次使用++时,迭代器都会读取并存储一个T值。

因此,当全局变量初始化时,它实际上会在输入main之前提示您输入。将ii的声明移至main的第二行可以解决问题。