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, следующие пары функций имеют одинаковый эффект:
std::fputc(f, c) и str.rdbuf()->sputc(c).std::fgetc(f) и str.rdbuf()->sbumpc().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 | Применён к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| LWG 49 | C++98 | не было указано (1), какое состояние фактически возвращается, и (2) что означает «синхронизированы» применительно к стандартным потокам C и C++ | указаны оба аспекта |
См. также
выводит данные в стандартный поток вывода C stdout(глобальный объект) |
|
выводит данные в стандартный поток ошибок C stderr, без буферизации(глобальный объект) |
|
выводит данные в стандартный поток ошибок C stderr(глобальный объект) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/ios_base/sync_with_stdio