Используется всякий раз, когда вам нужно извлечь или вывести данные с помощью потока.То есть всякий раз, когда вы делаете operator>>
, оператор извлечения или operator<<
, оператор вставки.
Его цель - упростить логику: «Установлены ли какие-либо биты сбоя? Синхронизировать буферы.входные потоки, опционально убирайте любые пробелы. Хорошо, готово? "
Все операторы потоков извлечения должны начинаться с:
// second parameter to true to not skip whitespace, for input that uses it
const std::istream::sentry ok(stream, icareaboutwhitespace);
if (ok)
{
// ...
}
И все операторы потоков вставки должны начинаться с:
const std::ostream::sentry ok(stream);
if (ok)
{
// ...
}
Это просто более чистый способ (что-то похожее):
if (stream.good())
{
if (stream.tie())
stream.tie()->sync();
// the second parameter
if (!noskipwhitespace && stream.flags() & ios_base::skipws)
{
stream >> std::ws;
}
}
if (stream.good())
{
// ...
}
ostream
просто пропускает часть пробела.