最終更新日時: 2025年07月05日 15時31分50秒 (JST)
rotarymars が更新

履歴 編集

function
<print>

# std::vprint_nonunicode(C++23)

    namespace std {
      void vprint_nonunicode(string_view fmt,
                             format_args args); // (1) C++23

      void vprint_nonunicode(FILE* stream,
                             string_view fmt,
                             format_args args); // (2) C++23
    }

## 概要

書式指定で非Unicode出力する。

- (1) : 標準出力に、書式指定で非Unicode出力する
- (2) : 指定された`FILE`に、書式指定で非Unicode出力する

`std::ostream`から派生したクラスオブジェクトに対して出力したい場合は、`<ostream>`ヘッダの`std::vprint_nonunicode()`関数を使用すること。

## 事前条件

- (2) : `stream`が有効な出力Cストリームを指していること

## 効果

- (1) : 以下と等価：

      vprint_unicode(stdout, fmt, args);

- (2) :

  - C++23 : `vformat(fmt, args)`の結果を`stream`に書き出す
  - C++26 : ストリームのロックを保持したまま、`fmt`で書式指定に従って書式化された`args`の文字表現を`stream`に書き出す

## 例外

- `vformat()`関数がなんらかの例外を送出する可能性がある
- 端末かストリームへの書き込みに失敗した場合、`system_error`を送出する
- `bad_alloc`を送出する可能性がある

## バージョン

### 言語

- C++23

### 処理系

- Clang: 19 ✅
- GCC: 14 ✅
- ICC: ??
- Visual C++: 2022 Update 7 ✅

## 関連項目

- `std::print()`
- `std::println()`
- `std::vprint_unicode()`

## 参照

- P2093R14 Formatted output
- P3107R5 Permit an efficient implementation of `std::print`
- P3235R3 `std::print` more types faster with less memory
  - C++26の上記2つの提案文書では、余分な動的メモリ確保をしないよう仕様が見直された