Потоки с режимом доступа ios_base::in
не поддерживают никаких операций вывода.Методы, изменяющие последовательность, потерпят неудачу, если ios_base::out
не указан.
С cppreference
Открытый режим: доступ, предоставленный внутренним объектом stringbuf к еговнутренняя последовательность символов.
ios_base::out
- output - Последовательность поддерживает операции вывода .
ios_base::in
всегда устанавливается для istringstream
объектов (даже если явно не установлено в аргументе, который).Обратите внимание, что, хотя istringstream
является входным потоком, его внутренний объект stringbuf может быть также настроен на поддержку операций вывода.Это влияет на некоторые операции, такие как putback
, которые в istringstream
могут изменять содержимое последовательности.
См. putback
пример :
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";