为什么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
是打印1
为true
。
1
。 std::boolalpha
添加到std::cout
,您将看到true
而不是1
。 问题的关键在于你的std::cout << stream
实际上并没有打印任何与流缓冲区内容有关的东西。 这不是您从流中提取数据的方式。
上一篇: Why does stringstream not move to next set of characters when cout?