为什么stringstream在cout时不会移动到下一组字符?

string inputLine = "1 2 3";
stringstream stream(inputLine);

// Case One
int x, y, z;
stream >> x;
stream >> y;
stream >> z;
// x, y, z have values 1, 2, 3

// Case Two
cout << stream << endl;
cout << stream << endl;
cout << stream << endl;
// All 3 print out 1

对于上面的代码,为什么当你分配给一个int,stringstream移动到下一组字符,但不是与cout?

实际的代码:我正在使用g ++在mac上编译它

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>

using namespace std;

int main(int argc, char *argv[])
{
    string inputLine = "1 2 3";

    stringstream stream(inputLine);

    // Case One
    int x, y, z;
    stream >> x;
    stream >> y;
    stream >> z;
    // x, y, z have values 1, 2, 3

    // Case Two
    cout << stream << endl;
    cout << stream << endl;
    cout << stream << endl;
}

这不应该编译,而是由于标准库实现中的错误(#56193),它不完全符合C ++ 11标准。

该流转换为代表其状态的bool ; cout是打印1true

  • 改变你的整数,你会看到输出仍然是1
  • 或者,将std::boolalpha添加到std::cout ,您将看到true而不是1
  • 问题的关键在于你的std::cout << stream实际上并没有打印任何与流缓冲区内容有关的东西。 这不是您从流中提取数据的方式。

    链接地址: http://www.djcxy.com/p/92247.html

    上一篇: Why does stringstream not move to next set of characters when cout?

    下一篇: How to download Swift Playgrounds iPad app?