最終更新日時(UTC):
が更新

履歴 編集

function
<print>

std::vprint_unicode(C++23)

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

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

概要

書式指定でUnicode出力する。

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

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

事前条件

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

効果

  • (1) : 以下と等価:

    vprint_unicode(stdout, fmt, args);
    

  • (2) : 以下の方法で自動変数を初期化する:

    string out = vformat(fmt, args);
    

    • streamがUnicodeを表示できる端末を参照している場合、ネイティブのUnicode APIを使用して端末に書き出す
    • outに無効なコードユニットが含まれる場合、その動作は未定義であり,実装者はそれを診断することが推奨される。それ以外の場合は、変更せずにストリームに書き出す。そうでなければ、変更せずstreamoutを書き出す。
    • ネイティブのUnicode APIを使用する場合、この関数はoutを書き出す前にフラッシュする

例外

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

備考

  • POSIXおよびWindowsにおいて、「streamが端末を参照している」とは、それぞれ、isatty(fileno(stream))、およびGetConsoleMode(_get_osfhandle(_fileno(stream)), ...) != 0を意味する
  • Windowsにおいて、ネイティブなUnicode APIとはWriteConsoleW()である
  • 推奨の方式:ネイティブのUnicode APIを呼び出す際に文字コード変換が必要な場合、実装はUnicode標準 (Unicode Standard Version 14.0 - Core Specification, Chapter 3.9) に従って無効なコードユニットを「U+FFFD REPLACEMENT CHARACTER」で置き換える必要がある

バージョン

言語

  • C++23

処理系

関連項目

参照