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 | Применено к | Поведение как опубликовано | Правильное поведение |
|---|---|---|---|
| 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/w/cpp/io/ios_base/sync_with_stdio