istringstream
构造函数参数openmode
的用途是什么?
由于我认为该对象从不支持流插入ios_base::out
运算符,因此特别需要指定<<
吗?
答案 0 :(得分:1)
具有ios_base::in
访问模式的流不支持任何输出操作。如果未指定ios_base::out
,则更改序列的方法将失败。
打开模式:内部stringbuf对象提供对其内部字符序列的访问。
始终为
ios_base::out
-输出-序列支持输出操作。ios_base::in
个对象设置
istringstream
(即使未在which参数中明确设置)。 请注意,即使istringstream
是输入流,也可以将其内部stringbuf对象设置为也支持输出操作。这会影响某些操作,例如putback
,可能会istringstream
中的某些操作更改序列的内容。
请参见putback
example:
std::istringstream s1("Hello, world", std::ios_base::out); // stream supporting output operations
s1.get();
if (s1.putback('Y')) // modifies the buffer
std::cout << s1.rdbuf() << '\n';
else
std::cout << "putback failed\n";
std::istringstream s2("Hello, world"); // input-only stream
s2.get();
if (s2.putback('Y')) // cannot modify input-only buffer
std::cout << s2.rdbuf() << '\n';
else
std::cout << "putback failed\n";
s2.clear();
if (s2.putback('H')) // non-modifying putback is OK
std::cout << s2.rdbuf() << '\n';
else
std::cout << "putback failed\n";