入出力ライブラリ
C++には、OOPスタイルのストリームベースI/Oライブラリと、プリントベースの関数群(C++23以降)、そして標準的なCスタイルI/O関数群が含まれています。
目次 |
[編集] ストリームベースI/O
ストリームベースの入出力ライブラリは、抽象的な入出力デバイスを中心に構成されています。これらの抽象デバイスにより、ファイル、メモリストリーム、またはその場で任意の操作(例:圧縮)を行うカスタムアダプタデバイスへの入出力を、同じコードで扱うことができます。
ほとんどのクラスはテンプレート化されているため、任意の基本文字型に適応させることができます。最も一般的な基本文字型(char と wchar_t)のために、個別のtypedefが提供されています。クラスは以下の階層に構成されています。
継承図
抽象化 | |
| ヘッダ
<ios>で定義 | |
| 書式化フラグと入出力例外を管理する (クラス) | |
| 任意のストリームバッファを管理する (クラステンプレート) | |
| ヘッダ
<streambuf> で定義 | |
| 生のデバイスを抽象化する (クラステンプレート) | |
| ヘッダ
<ostream>で定義 | |
| 与えられた抽象デバイス(std::basic_streambuf)をラップし 高水準な出力インターフェースを提供する (クラステンプレート) | |
| ヘッダ
<istream>で定義 | |
| 与えられた抽象デバイス(std::basic_streambuf)をラップし 高水準な入力インターフェースを提供する (クラステンプレート) | |
| 与えられた抽象デバイス(std::basic_streambuf)をラップし 高レベルな入出力インターフェースを提供する (クラステンプレート) | |
ファイルI/Oの実装 | |
| ヘッダ
<fstream> で定義 | |
| 生のファイルデバイスを実装する (クラステンプレート) | |
| 高レベルなファイルストリーム入力操作を実装する (クラステンプレート) | |
| 高レベルなファイルストリーム出力操作を実装する (クラステンプレート) | |
| 高レベルなファイルストリーム入出力操作を実装する (クラステンプレート) | |
文字列I/Oの実装 | |
| ヘッダ
<sstream> で定義 | |
| 生の文字列デバイスを実装する (クラステンプレート) | |
| 高レベルな文字列ストリーム入力操作を実装する (クラステンプレート) | |
| 高レベルな文字列ストリーム出力操作を実装する (クラステンプレート) | |
| 高レベルな文字列ストリーム入出力操作を実装する (クラステンプレート) | |
配列I/Oの実装 | |
| ヘッダ
<spanstream> で定義 | |
| (C++23) |
生の固定長文字バッファデバイスを実装する (クラステンプレート) |
| (C++23) |
固定長文字バッファ入力操作を実装する (クラステンプレート) |
| (C++23) |
固定長文字バッファ出力操作を実装する (クラステンプレート) |
| (C++23) |
固定長文字バッファ入出力操作を実装する (クラステンプレート) |
| ヘッダ
<strstream> で定義 | |
| (C++98で非推奨)(C++26で削除) |
生の文字配列デバイスを実装する (クラス) |
| (C++98で非推奨)(C++26で削除) |
文字配列入力操作を実装する (クラス) |
| (C++98で非推奨)(C++26で削除) |
文字配列出力操作を実装する (クラス) |
| (C++98で非推奨)(C++26で削除) |
文字配列入出力操作を実装する (クラス) |
同期出力 (C++20以降) | |
| ヘッダ
<syncstream> で定義 | |
| (C++20) |
同期出力デバイスラッパー (クラステンプレート) |
| (C++20) |
同期出力ストリームラッパー (クラステンプレート) |
[編集] typedef
名前空間 std には、一般的な文字型に対する以下のtypedefが提供されています
[編集] 事前定義された標準ストリームオブジェクト
| ヘッダ
<iostream> で定義 | |
| 標準C入力ストリーム stdin から読み取る (グローバルオブジェクト) | |
| 標準C出力ストリーム stdout に書き込む (グローバルオブジェクト) | |
| 標準Cエラー ストリーム stderr にバッファリングなしで書き込む (グローバルオブジェクト) | |
| 標準Cエラー ストリーム stderr に書き込む (グローバルオブジェクト) | |
[編集] I/Oマニピュレータ
ストリームベースのI/Oライブラリは、I/Oマニピュレータ(例:std::boolalpha、std::hexなど)を使用して、ストリームの振る舞いを制御します。
[編集] 型
以下の補助的な型が定義されています
| ヘッダ
<ios>で定義 | |
| ファイル/ストリームの相対的な位置(fposからのオフセット)を表し、任意のファイルサイズを表現するのに十分 (typedef) | |
| I/O操作で転送された文字数、またはI/Oバッファのサイズを表す (typedef) | |
| ストリームまたはファイル内の絶対位置を表す (クラステンプレート) | |
std::fpos<std::mbstate_t> に対する以下のtypedef名が提供されています
| ヘッダ
<iosfwd> で定義 | |
| 型 | 定義 |
std::streampos
|
std::fpos<std::char_traits<char>::state_type> |
std::wstreampos
|
std::fpos<std::char_traits<wchar_t>::state_type> |
std::u8streampos (C++20) |
std::fpos<std::char_traits<char8_t>::state_type> |
std::u16streampos (C++11) |
std::fpos<std::char_traits<char16_t>::state_type> |
std::u32streampos (C++11) |
std::fpos<std::char_traits<char32_t>::state_type> |
[編集] エラーカテゴリインターフェース (C++11以降)
| ヘッダ
<ios>で定義 | |
| (C++11) |
IOストリームのエラーコード (enum) |
| (C++11) |
iostreamのエラーカテゴリを識別する (関数) |
[編集] プリント関数 (C++23以降)
すでにフォーマットされたテキストに対して書式付きI/Oを実行する、Unicode対応のプリント系関数です。これらはstd::formatのすべてのパフォーマンス上の利点を持ち、デフォルトでロケールに依存せず、グローバルな状態を減らし、一時的なstd::stringオブジェクトのアロケーションとoperator<<の呼び出しを避け、一般的にiostreamやstdioと比較してフォーマットをより効率的にします。
以下のプリント系関数が提供されています
| ヘッダ
<print> で定義 | |
| (C++23) |
引数の書式化された表現を用いて、stdoutまたはファイルストリームに出力する (関数テンプレート) |
| (C++23) |
std::printと同じだが、各出力の末尾に改行が追加される点が異なる (関数テンプレート) |
| 引数の型消去された表現を用いて、Unicode対応のstdoutまたはファイルストリームに出力する (関数) | |
| 引数の型消去された表現を用いて、stdoutまたはファイルストリームに出力する (関数) | |
| ヘッダ
<ostream>で定義 | |
| (C++23) |
引数の書式化された表現を出力する (関数テンプレート) |
| (C++23) |
引数の書式化された表現に'\n'を付加して出力する (関数テンプレート) |
[編集] CスタイルI/O
C++には、std::fopen、std::getcなどの、C言語によって定義された入出力関数も含まれています。
[編集] 関連項目
| ファイルシステムライブラリ (C++17以降) |