Namespaces
Variants

std::ios_base:: sync_with_stdio

From cppreference.net
static bool sync_with_stdio ( bool sync = true ) ;
**Примечание:** В данном случае весь текст внутри тегов ` ` является C++ кодом, который согласно инструкциям не подлежит переводу. HTML структура и атрибуты также сохранены без изменений.

Устанавливает, синхронизируются ли стандартные потоки 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 , следующие пары функций имеют идентичный эффект:

1) std:: fputc ( f, c ) и str. rdbuf ( ) - > sputc ( c ) .
2) std:: fgetc ( f ) и str. rdbuf ( ) - > sbumpc ( ) .
3) std:: ungetc ( c, f ) и str. rdbuf ( ) - > sputbackc ( c ) .

На практике это означает, что синхронизированные потоки 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
(глобальный объект)