• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    function template
    <print>

    std::print

    namespace std {
      template <class... Args>
      void print(format_string<Args...> fmt,
                 Args&&... args);             // (1) C++23
    
      template <class... Args>
      void print(FILE* stream,
                 format_string<Args...> fmt,
                 Args&&... args);             // (2) C++23
    }
    

    概要

    書式指定で出力する。

    書式はstd::format()関数のページを参照。

    この関数は、std::printf()関数ライクな書式指定で引数を文字列化して出力する。

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

    この関数は、末尾に改行コードが付かないことに注意。改行コードを自動で付けたい場合は、std::println()関数を使用すること。

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

    効果

    備考

    • LinuxやmacOSといった環境では、通常のchar配列の文字列リテラルはUTF-8にエンコーディングされる
    • WindowsのVisual Studioにおいては、ソースコードと実行時文字集合をUTF-8にする/utf-8オプションを使用することで、通常のchar配列の文字列リテラルがUTF-8にエンコーディングされる
    • 「通常の文字列リテラルがUTF-8エンコーディングされている場合」という仕様は、コードでは以下のように表現できる:
      constexpr bool is_utf8() {
        const unsigned char micro[] = "\u00B5";
        return sizeof(micro) == 3 && micro[0] == 0xC2 && micro[1] == 0xB5;
      }
      
      template <typename... Args>
      void print(string_view fmt, const Args&... args) {
        if (is_utf8())
          vprint_unicode(fmt, make_format_args(args...));
        else
          vprint_nonunicode(fmt, make_format_args(args...));
      }
      

    基本的な使い方

    #include <print>
    
    int main()
    {
      std::print("Hello {} World\n", 42);
    
      // 出力先を指定
      std::print(stdout, "Hello {} World\n", 42); // 標準出力に出力
      std::print(stderr, "Hello {} World\n", 42); // 標準エラーに出力
    }
    

    出力

    Hello 42 World
    Hello 42 World
    Hello 42 World
    

    モジュールをインポートする例

    import std;
    #include <cstdio>
    
    int main()
    {
      std::print("Hello {} World\n", 42);
    
      // stdout / stderrはマクロとして定義される。
      // モジュールはマクロをエクスポートしないので、
      // stdout / stderrを使用する場合は<cstdio>をインクルードする必要がある
      std::print(stdout, "Hello {} World\n", 42);
    }
    

    出力

    Hello 42 World
    Hello 42 World
    

    実行時の書式文字列を使用する (C++26)

    #include <print>
    
    int main()
    {
      std::string fmt = "{}\n";
      std::print(std::runtime_format(fmt), "Hello");
    }
    

    出力

    Hello
    

    バージョン

    言語

    • C++23

    処理系

    関連項目

    参照