C++教科書/標準ライブラリ編/<iosfwd>の章

編集

概要

編集

このヘッダー <iosfwd> は、C++ 入出力ライブラリのための前方宣言を格納しています。前方宣言とは、クラスや関数の存在を宣言するのみで、その詳細な定義は後回しにする技法です。これにより、コンパイラはコードをコンパイルする際に必要な情報のみを事前に取得でき、コードの依存関係を整理できます。

ヘッダーで宣言されている内容

編集

<iosfwd> ヘッダーには、以下のものが宣言されています。

テンプレートクラス

編集
  • std::char_traits (テンプレート): 文字型の特性を表現します。さまざまな文字型 (char, wchar_t, char8_t, char16_t, char32_t) に対する specialization が用意されています。
    • std::char_traits<char>: char 型の特性を表現します。
    • std::char_traits<wchar_t>: wchar_t 型の特性を表現します。
    • std::char_traits<char8_t> (C++20 以降): char8_t 型の特性を表現します。
    • std::char_traits<char16_t> (C++11 以降): char16_t 型の特性を表現します。
    • std::char_traits<char32_t> (C++11 以降): char32_t 型の特性を表現します。
  • std::allocator (テンプレート): メモリ割り当てを行うためのクラスです。デフォルトのアロケータもここで宣言されています。

入出力ストリーム関係のクラス

編集
  • std::basic_ios (テンプレート): 基本的な入出力ストリームクラスで、実際の入出力バッファを管理します。
  • std::fpos (テンプレート): ストリーム内またはファイル内での絶対位置を表すクラスです。
    • std::fpos<std::char_traits<char>::state_type>: char 型のストリームにおける位置を表します。
    • std::fpos<std::char_traits<wchar_t>::state_type>: wchar_t 型のストリームにおける位置を表します。
    • std::fpos<std::char_traits<char8_t>::state_type> (C++20 以降): char8_t 型のストリームにおける位置を表します。
    • std::fpos<std::char_traits<char16_t>::state_type> (C++11 以降): char16_t 型のストリームにおける位置を表します。
    • std::fpos<std::char_traits<char32_t>::state_type> (C++11 以降): char32_t 型のストリームにおける位置を表します。
  • std::basic_streambuf (テンプレート): 入出力デバイスを抽象化したクラスです。実際のデバイス (ファイル、コンソールなど) とは独立して動作します。
  • std::basic_istream (テンプレート): std::basic_streambuf をラッピングし、高レベルな入力インターフェイスを提供します。
  • std::basic_ostream (テンプレート): std::basic_streambuf をラッピングし、高レベルな出力インターフェイスを提供します。
  • std::basic_iostream (テンプレート): std::basic_streambuf をラッピングし、入出力両方のインターフェイスを提供します。

ファイル入出力関係のクラス

編集
  • std::basic_filebuf (テンプレート): ファイルデバイスのための raw 入出力バッファを実装します。
  • std::basic_ifstream (テンプレート): ファイルからの高レベルな入力ストリーム機能を提供します。
  • std::basic_ofstream (テンプレート): ファイルへの高レベルな出力ストリーム機能を提供します。
  • std::basic_fstream (テンプレート): ファイルからの入出力両方の機能を提供します。

文字列ストリーム関係のクラス

編集
  • std::basic_stringbuf (テンプレート): 文字列デバイスのための raw 入出力バッファを実装します。
  • std::basic_istringstream (テンプレート): 文字列からの高レベルな入力ストリーム機能を提供します。
  • std::basic_ostringstream (テンプレート): 文字列への高レベルな出力ストリーム機能を提供します。
  • std::basic_stringstream (テンプレート): 文字列からの入出力両方の機能を提供します。

C++20 以降で導入されたクラス

編集
  • std::basic_syncbuf (テンプレート): スレッドセーフな出力デバイスラッパーです。
  • std::basic_osyncstream (テンプレート): スレッドセーフな出力ストリームラッパーです。

C++23 以降で導入されたクラス

編集
  • std::basic_spanbuf (テンプレート): 固定長の文字バッファデバイスのための raw 入出力バッファを実装します。
  • std::basic_ispanstream (テンプレート): 固定長の文字バッファからの入力ストリーム機能を提供します。
  • std::basic_ospanstream (テンプレート): 固定長の文字バッファへの出力ストリーム機能を提供します。
  • std::basic_spanstream (テンプレート): 固定長の文字バッファからの入出力両方の機能を提供します。

省略部分の説明

編集

ヘッダー宣言内には、以下の省略部分があります。

  • std::basic_Tに対して、 std::Tstd::wT がそれぞれ std::basic_T<char>std::basic_T<wchar_t> のシノニムとして宣言されている部分があります。これは、可読性向上のためのもので、より短くクラス名を使えるようにするためのものです。
  • 一部のクラス (例えば std::streampos) は、別のクラスの typedef として宣言されています。これも可読性向上のためのもので、より短くクラス名を使えるようにするためのものです。
  • C++20 以降で導入されたクラス std::basic_syncbufstd::basic_osyncstream は、C++17 までのバージョンでは省略されています。
  • C++23 以降で導入されたクラス std::basic_spanbuf, std::basic_ispanstream, std::basic_ospanstream, std::basic_spanstream は、C++20 までのバージョンでは省略されています。

非推奨ヘッダー

編集

このヘッダー <iosfwd> は非推奨とされています。代わりに、<ios> ヘッダーを直接インクルードすることを推奨します。<ios> ヘッダーには、<iosfwd> で宣言されているすべてのクラスとテンプレートが定義されています。

まとめ

編集

<iosfwd> ヘッダーは、C++ 入出力ライブラリの基本的なクラスとテンプレートのための前方宣言を提供します。C++20 以降では新たなクラスが追加され、C++23 以降ではさらに新たなクラスが追加されています。このヘッダーは非推奨とされているため、<ios> ヘッダーを直接インクルードすることを推奨します。