• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    function
    <print>

    std::vprint_unicode

    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) :

      • C++23 :

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

          string out = vformat(fmt, args);
          

        • streamがUnicodeを表示できる端末を参照している場合、ネイティブのUnicode APIを使用して端末に書き出す

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

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

    例外

    • (2) :
      • C++23 : 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

    処理系

    関連項目

    参照