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::T
とstd::wT
がそれぞれstd::basic_T<char>
とstd::basic_T<wchar_t>
のシノニムとして宣言されている部分があります。これは、可読性向上のためのもので、より短くクラス名を使えるようにするためのものです。- 一部のクラス (例えば
std::streampos
) は、別のクラスの typedef として宣言されています。これも可読性向上のためのもので、より短くクラス名を使えるようにするためのものです。 - C++20 以降で導入されたクラス
std::basic_syncbuf
とstd::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>
ヘッダーを直接インクルードすることを推奨します。