Spec-Zone.ru › C++

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

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 Применён к Опубликованное поведение Корректное поведение
LWG 49 C++98 не было указано (1), какое состояние фактически возвращается, и
(2) что означает «синхронизированы» применительно к стандартным потокам C и C++
указаны оба аспекта

См. также

coutwcout
выводит данные в стандартный поток вывода C stdout
(глобальный объект)
cerrwcerr
выводит данные в стандартный поток ошибок C stderr, без буферизации
(глобальный объект)
clogwclog
выводит данные в стандартный поток ошибок 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API