- istream[meta header]
- std[meta namespace]
- class template[meta id-type]
namespace std {
template<class CharT, class Traits = char_traits<CharT>>
class basic_istream : virtual public basic_ios<CharT, Traits> { …… };
using istream = basic_istream<char>;
using wistream = basic_istream<wchar_t>;
}
- basic_ios[link ../ios/basic_ios.md]
- char_traits[link ../string/char_traits.md]
basic_istream
は、入力ストリームを表現するクラスである。
すなわち、rdbuf()
が指し示すストリームバッファオブジェクトに対する読み取り操作を提供する。
各種の入力関数——特に>>
演算子——がこのクラスのメンバ関数・非メンバ関数として定義されている。
このため、ユーザーコードで入力処理を実装する際には、basic_istream
、あるいはそれに対する別名であるistream
やwistream
などの型への参照を実引数として受け取るようにすると良い。
テンプレートパラメータとして文字型を受け取るようになっており、使用を容易にするため、以下のパラメータ設定済みエイリアスが定義されている。
このエイリアスは<istream>
ヘッダと<iosfwd>
ヘッダで定義されている。
エイリアス | 説明 | 対応バージョン |
---|---|---|
istream |
char 型。ASCII、UTF-8等のマルチバイト文字列や、バイナリデータとして使用する。 |
|
wistream |
wchar_t 型。ワイド文字列として使用する。 |
basic_istream
での入力操作は、書式化入力関数と非書式化入力関数の2種類に分類される。
書式化入力関数は、そのほとんどがストリームバッファから抽出した文字の並びから目的のオブジェクトに変換する処理を伴う入力処理である。 以下の共通した機能を持つ。
skipws
フラグが設定されている場合、入力処理開始時に空白文字を読み飛ばす処理が挿入される。- オブジェクトへの変換処理が失敗した場合、
setstate(ios_base::failbit)
が呼び出される。
>>
演算子での入力処理の多くは書式化入力関数である。
非書式化入力関数は、ストリームバッファから抽出した文字の並びをそのまま呼び出し元に引き渡す入力処理である。 また、ストリームバッファからの読み取りを伴わない入力操作も便宜上こちらに分類される。
非書式化関数で入力した文字数はgcount
メンバ関数で取得できる。
注意:書式化入力関数と非書式化入力関数すべてについて、「効果」の項目は以下の処理を前提として記載している。
書式化入力関数・非書式化入力関数は、入力処理に先立ってsentry
オブジェクトを構築し、関数から脱出する前に破棄する。
- 書式化入力関数は、
sentry
コンストラクタの2番目の仮引数noskipws
にfalse
を渡す。 - 非書式化入力関数は、
sentry
コンストラクタの2番目の仮引数noskipws
にtrue
を渡す。
構築したsentry
オブジェクトがexplicit operator bool
関数でtrue
に変換できる場合のみ、実際の入力処理(各関数の「効果」として記載した処理)が実行される。
関数内部で例外が送出された場合、ios_base::badbit
を設定する。
そして、(exceptions() & badbit) != 0
であれば例外を再送出する。
基底クラスであるios_base
とbasic_ios
も参照のこと。
名前 | 説明 | 対応バージョン |
---|---|---|
sentry |
入力操作の前処理・後処理 |
名前 | 説明 | 対応バージョン |
---|---|---|
(constructor) |
コンストラクタ | |
(destructor) |
デストラクタ | |
operator= |
ムーブ代入 | C++11 |
swap |
値の交換 | C++11 |
- コピーコンストラクタとコピー代入演算子はdelete定義されている。
- ムーブコンストラクタ・ムーブ代入演算子と
swap
はprotectedで定義されている。
名前 | 説明 | 対応バージョン |
---|---|---|
operator>> |
書式化入力・マニピュレータの実行 | |
get |
文字・文字列の入力 | |
getline |
1行の文字列の入力 | |
peek |
次の入力文字を確認する | |
read |
指定した数ちょうどの文字の入力 | |
readsome |
指定した数までの文字の入力 | |
ignore |
入力文字を読み捨てる |
>>
演算子のほとんどは書式化入力関数である。
その他のメンバ関数は非書式化入力関数である。
名前 | 説明 | 対応バージョン |
---|---|---|
putback |
任意の文字を1文字を入力ストリームに戻す | |
unget |
最後に読み取った1文字を入力ストリームに戻す |
これらは非書式化入力関数である。
名前 | 説明 | 対応バージョン |
---|---|---|
tellg |
現在の読み取り位置を取得する | |
seekg |
読み取り位置を移動する |
これらは非書式化入力関数である。
名前 | 説明 | 対応バージョン |
---|---|---|
gcount |
最後に実行した非書式化入力関数での入力文字数を取得する | |
sync |
ストリームバッファの同期 |
gcountは書式化入力関数・非書式化入力関数いずれでもない。 syncは非書式化入力関数である。
名前 | 説明 | 対応バージョン |
---|---|---|
operator>> |
文字・文字列の書式化入力、および、右辺値ストリームからの入力 |