最終更新日時(UTC): 2024年06月11日 13時45分38秒
Akira Takahashi が更新

履歴 編集

function
<syncstream>

# std::basic_syncbuf::sync(C++20)

    protected:
    int sync() override;

## 概要

フラッシュが保留されていることを記録する。その後、同期時排出ポリシーに応じて`emit()`を呼び出す。同期時排出ポリシーは`set_emit_on_sync()`で変更することができる。

## 効果

ラップされたストリームバッファがフラッシュされることを記録する。
その後、同期時排出ポリシーが`true`ならば、`emit()`を呼び出す。

## 戻り値

`emit()`が呼び出されて`false`を戻した場合は、-1、そうでなければ 0 を返す。

## 備考

同期時排出ポリシーが`false`の場合、実際のフラッシュは`emit()`が呼び出されるまで遅延する。

## 例

    #include <iostream>
    #include <syncstream>

    int main()
    {
      std::osyncstream bout{std::cout};
      bout << "Hello, World!";
      bout.flush();  // この例では、flush() が rdbuf()->pubsync() を呼び出し、これが rdbuf()->sync() を呼び出している。
                     // 非同期排出ポリシーはデフォルトで false なので、ここでは rdbuf()->emit() は呼ばれず、
                     // 実際のフラッシュは、bout 破棄時に rdbuf()->emit() が呼び出されるまで遅延される。
    }

### 出力

    Hello, World!

## バージョン

### 言語

- C++20

### 処理系

- Clang: ??
- GCC: 11.1 ✅
- Visual C++: 2019 update 10 ✅

## 参照

- P0053R7 C++ Synchronized Buffered Ostream