std::ios_base:: sync_with_stdio
|
static
bool
sync_with_stdio
(
bool
sync
=
true
)
;
|
||
Устанавливает, синхронизируются ли стандартные потоки C++ со стандартными потоками C после каждой операции ввода/вывода.
Стандартные потоки C++ следующие: std::cin , std::cout , std::cerr , std::clog , std::wcin , std::wcout , std::wcerr и std::wclog .
Стандартные потоки C следующие: stdin , stdout и stderr .
Для стандартного потока str , синхронизированного с C-потоком f , следующие пары функций имеют идентичный эффект:
На практике это означает, что синхронизированные потоки C++ не используют буферизацию, и каждая операция ввода-вывода в потоке C++ немедленно применяется к буферу соответствующего потока C. Это позволяет свободно комбинировать ввод-вывод C++ и C.
Кроме того, синхронизированные потоки C++ гарантированно являются потокобезопасными (отдельные символы, выводимые из нескольких потоков, могут чередоваться, но гонки данных не возникают).
Если синхронизация отключена, стандартным потокам C++ разрешено буферизовать свой ввод-вывод независимо, что в некоторых случаях может быть значительно быстрее.
По умолчанию все восемь стандартных потоков C++ синхронизированы с соответствующими потоками C.
Если эта функция вызывается после того, как произошел ввод-вывод в стандартном потоке, поведение определяется реализацией: варианты варьируются от отсутствия эффекта до уничтожения буфера чтения.
Содержание |
Параметры
| sync | - | новая настройка синхронизации |
Возвращаемое значение
Состояние синхронизации перед вызовом функции.
Пример
#include <cstdio> #include <iostream> int main() { std::ios::sync_with_stdio(false); std::cout << "a\n"; std::printf("b\n"); std::cout << "c\n"; }
Возможный вывод:
b a c
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 49 | C++98 |
не было указано (1) какое состояние фактически возвращается и
(2) что означает 'синхронизация' между стандартными потоками C и C++ |
оба аспекта указаны |
Смотрите также
|
записывает в стандартный поток вывода C
stdout
(глобальный объект) |
|
|
записывает в стандартный поток ошибок C
stderr
, без буферизации
(глобальный объект) |
|
|
записывает в стандартный поток ошибок C
stderr
(глобальный объект) |