最終更新日時: 2024年07月16日 18時44分23秒 (JST)
raclamusi が更新

履歴 編集

function template
<ostream>

# std::flush_emit(C++20)

    namespace std {
      template<class charT, class traits>
      basic_ostream<charT, traits>& flush_emit(basic_ostream<charT, traits>& os);
    }

## 概要

このマニピュレータは、実際には`std::basic_osyncstream`に対して使用されることが期待される。それ以外の場合、このマニピュレータは`std::flush`と等価である。

このマニピュレータは、`std::basic_osyncstream`のオブジェクトに`flush`を記録し、文字を転送する。ここで、通常`flush`をしただけでは文字は転送されないようになっていることに注意。この設定(同期時排出ポリシー)を変更するために、`emit_on_flush`、`noemit_on_flush`といったマニピュレータが用意されている。

## 効果

`os.flush()`を呼び出す。 続いて`os.rdbuf()`が`std::basic_syncbuf<charT, traits, Allocator>*`である場合、これを`buf`とすると、`buf->emit()`を呼び出す。

## 戻り値

`os`

## 備考

本関数は、直接呼ぶのではなく、マニピュレータ関数へのポインタを引数に取る出力演算子（`operator<<`、挿入演算子、インサータとも呼ばれる）を通じて呼び出されるのが一般的である。

## 例

    #include <iostream>
    #include <syncstream>

    int main()
    {
      std::osyncstream bout{std::cout};
      bout << "Hello, World!";

      bout << std::flush_emit; // 通常はここで保留中の文字は転送されないが、
                               // ここで文字が転送される。
                               // なお、同期時排出ポリシーは false のままである。
    }

### 出力

    Hello, World!

## バージョン

### 言語

- C++20

## 参照

- `emit_on_flush`
- `noemit_on_flush`
- `std::basic_osyncstream`
- `std::basic_syncbuf`