basic_istream クラス

Char_T 型の要素を含むストリーム バッファーからの要素とエンコードされたオブジェクトの抽出を制御するオブジェクトを表します。この型は char_type とも呼ばれ、その文字特性は、traits_type とも呼ばれるクラス Tr によって決定されます。

構文

template <class Char_T, class Tr = char_traits<Char_T>>
class basic_istream : virtual public basic_ios<Char_T, Tr>

解説

operator>> をオーバーロードするメンバー関数のほとんどは、書式設定された入力関数です。 これらは以下のパターンに従います。

iostate state = goodbit;
const sentry ok(*this);

if (ok)
{
    try
    {
        /*extract elements and convert
            accumulate flags in state.
            store a successful conversion*/
    }
    catch (...)
    {
        try
        {
            setstate(badbit);

        }
        catch (...)
        {
        }
        if ((exceptions()& badbit) != 0)
            throw;
    }
}
setstate(state);

return (*this);

その他のメンバー関数の多くは、書式が設定されていない入力関数です。 これらは以下のパターンに従います。

iostate state = goodbit;
count = 0;    // the value returned by gcount
const sentry ok(*this, true);

if (ok)
{
    try
    {
        /* extract elements and deliver
            count extracted elements in count
            accumulate flags in state */
    }
    catch (...)
    {
        try
        {
            setstate(badbit);

        }
        catch (...)
        {
        }
        if ((exceptions()& badbit) != 0)
            throw;
    }
}
setstate(state);

要素の抽出中にファイルの終わりに到達した場合、どちらの関数グループも setstate(eofbit) を呼び出します。 詳細については、setstateを参照してください。

クラス basic_istream<Char_T, Tr> ストアのオブジェクト:

  • クラス basic_ios<Char_T, Tr> の仮想パブリック基本オブジェクト。 詳細については、basic_iosを参照してください。

  • 最後の書式設定されていない入力操作の抽出カウント (以前のコードで count と呼ばれていたもの)。

入力ストリームの詳細については、basic_ifstream クラスの例を参照してください。

コンストラクター

コンストラクター 説明
basic_istream basic_istream 型のオブジェクトを構築します。

メンバー関数

メンバー関数 説明
gcount 書式設定されていない最後の入力中に読まれた文字数を返します。
get 入力ストリームから 1 つ以上の文字を読み取ります。
getline 入力ストリームから行を読み取ります。
ignore 複数の要素を、現在読み取った位置からスキップさせます。
peek 読み取る次の文字を返します。
putback ストリームに指定された文字を配置します。
read 指定された数の文字をストリームから読み取り、配列に保存します。
readsome バッファーからのみ読み取ります。
seekg ストリームでの読み取り位置を移動させます。
sentry この入れ子になったクラスは、オブジェクトの宣言が書式設定された入力関数と書式設定されていない入力関数を構築するオブジェクトについて記述します。
swap この basic_istream オブジェクトを、指定した basic_istream オブジェクト パラメーターと交換します。
sync ストリームに関連付けられた入力デバイスをストリームのバッファーと同期します。
tellg ストリーム内の現在の読み取り位置を報告します。
unget 最後に読み取った文字をストリームに戻します。

演算子

演算子 説明
operator>> 入力ストリームで関数を呼び出すか、または入力ストリームから書式設定されたデータを読み取ります。
operator= 演算子の右辺の basic_istream をこのオブジェクトに代入します。 これは、コピーを残さない rvalue 参照を伴う移動代入です。

必要条件

ヘッダー:<istream>

名前空間std:

basic_istream::basic_istream

basic_istream 型のオブジェクトを構築します。

explicit basic_istream(
    basic_streambuf<Char_T, Tr>* strbuf,
    bool _Isstd = false);

basic_istream(basic_istream&& right);

パラメーター

strbuf
basic_streambuf 型のオブジェクト。

_Isstd
これが標準ストリームの場合は true、それ以外の場合は false

right
コピーする basic_istream オブジェクト。

解説

最初のコンストラクターが init(strbuf) を呼び出して基底クラスを初期化します。 ゼロも抽出カウントに格納されます。 詳細については、initを参照してください。 この抽出カウントの詳細については、「basic_istream クラス」の概要の「コメント」セクションを参照してください。

2 番目のコンストラクターが move(right) を呼び出して基底クラスを初期化します。 また、抽出カウントに格納 right.gcount() され、次の抽出数 rightに 0 が格納されます。

入力ストリームの詳細については、basic_ifstream::basic_ifstream の例を参照してください。

basic_istream::gcount

書式設定されていない最後の入力中に読まれた文字数を返します。

streamsize gcount() const;

戻り値

抽出カウント。

解説

書式設定されていない文字を読み取るために使用 basic_istream::get します。

// basic_istream_gcount.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

int main( )
{
   cout << "Type the letter 'a': ";

   ws( cin );
   char c[10];

   cin.get( &c[0],9 );
   cout << c << endl;

   cout << cin.gcount( ) << endl;
}
a
Type the letter 'a': a
1

basic_istream::get

入力ストリームから 1 つ以上の文字を読み取ります。

int_type get();

basic_istream<Char_T, Tr>& get(Char_T& Ch);
basic_istream<Char_T, Tr>& get(Char_T* str, streamsize count);
basic_istream<Char_T, Tr>& get(Char_T* str, streamsize count, Char_T delimiter);

basic_istream<Char_T, Tr>& get(basic_streambuf<Char_T, Tr>& strbuf);
basic_istream<Char_T, Tr>& get(basic_streambuf<Char_T, Tr>& strbuf, Char_T delimiter);

パラメーター

count
strbuf から読み取る文字の数。

delimiter
前に検出された場合に読み取りを終了する count必要がある文字。

str
書き込み先の文字列。

Ch
取得する文字。

strbuf
書き込み先のバッファー。

戻り値

get のパラメーターなしの形式では、整数またはファイルの終わりとして読み取られる要素を返します。 再メインフォームはストリーム (*this) を返します。

解説

最初の書式設定されていない入力関数は、可能であれば、rdbuf->sbumpc を返すように、要素を抽出します。 それ以外の場合は traits_type::eofを返します。 この関数は要素を抽出しない場合、setstate(failbit) を呼び出します。 詳細については、setstateを参照してください。

2 番目の関数では、同じ方法で int_type 要素 meta を抽出します。 metatraits_type::eof と等しい場合、関数は setstate(failbit) を呼び出します。 それ以外の場合は、traits_type::to_char_type(meta)Ch に格納します。 *this が返されます。 詳細については、to_char_typeを参照してください。

3 番目の関数は、get(str, count, widen('\n')) を返します。

4 番目の関数では、最大 count - 1 の要素を抽出し、それらを str で始まる配列に格納します。 これは格納する抽出した要素の後に常に char_type を格納します。 テストの順に抽出は停止します。

  • ファイルの終わり。

  • 関数が delimiter と等しい要素を抽出した後。 この場合、この要素は制御されたシーケンスに戻されます。

  • 関数が count - 1 要素を抽出した後。

この関数は要素を抽出しない場合、setstate(failbit) を呼び出します。 いずれの場合も、*this を返します。

5 番目の関数は get(strbuf, widen('\n')) を返します。

6 番目の関数は要素を抽出し、それらを .strbuf 抽出は、ファイルの終わりまたは等しい delimiter要素 (抽出されない要素) で停止します。 また、挿入が失敗した場合または (キャッチされるが再スローされない) 例外をスローする場合は、対象の要素を抽出せずに停止します。 この関数は要素を抽出しない場合、setstate(failbit) を呼び出します。 いずれの場合も、この関数は を返します *this

// basic_istream_get.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

int main( )
{
   char c[10];

   c[0] = cin.get( );
   cin.get( c[1] );
   cin.get( &c[2],3 );
   cin.get( &c[4], 4, '7' );

   cout << c << endl;
}
1111

basic_istream::getline

入力ストリームから行を取得します。

basic_istream<Char_T, Tr>& getline(
    char_type* str,
    streamsize count);

basic_istream<Char_T, Tr>& getline(
    char_type* str,
    streamsize count,
    char_type delimiter);

パラメーター

count
strbuf から読み取る文字の数。

delimiter
前に検出された場合に読み取りを終了する count必要がある文字。

str
書き込み先の文字列。

戻り値

ストリーム (*this)。

解説

これらの書式設定されていない最初の入力関数は、getline(str, count, widen('\n')) を返します。

2 番目の関数では、最大 count - 1 の要素を抽出し、それらを str で始まる配列に格納します。 これは格納する抽出した要素の後に常に文字列終端文字を格納します。 テストの順に抽出は停止します。

  • ファイルの終わり。

  • 関数が delimiter と等しい要素を抽出した後。 この場合、要素は戻されず、制御されたシーケンスに追加されません。

  • 関数が count - 1 要素を抽出した後。

関数が要素を抽出しなかった場合、または count - 1 要素を抽出した場合は、setstate(failbit) を呼び出します。 いずれの場合も、*this を返します。 詳細については、setstateを参照してください。

// basic_istream_getline.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

int main( )
{
   char c[10];

   cin.getline( &c[0], 5, '2' );
   cout << c << endl;
}
121

basic_istream::ignore

複数の要素を、現在読み取った位置からスキップさせます。

basic_istream<Char_T, Tr>& ignore(
    streamsize count = 1,
    int_type delimiter = traits_type::eof());

パラメーター

count
現在の読み取り位置からスキップする要素の数。

delimiter
カウントの前に出現した場合には ignore を返し、delimiter の後のすべての要素の読み取りを許可する要素。

戻り値

ストリーム (*this)。

解説

書式設定されていない入力関数は、最大 count の要素を抽出し、これらを破棄します。 ただし、countnumeric_limits<int>::max と等しい場合、任意の大きさとして取得されます。 抽出は、traits_type::to_int_type(Ch) が (同じく抽出された) delimiter と等しくなるように、ファイルの終わりまたは要素 Ch の早い段階で停止します。 *this が返されます。 詳細については、to_int_typeを参照してください。

// basic_istream_ignore.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
   using namespace std;
   char chararray[10];
   cout << "Type 'abcdef': ";
   cin.ignore( 5, 'c' );
   cin >> chararray;
   cout << chararray;
}
Type 'abcdef': abcdef
def

basic\_istream::operator>>

入力ストリームで関数を呼び出すか、または入力ストリームから書式設定されたデータを読み取ります。

basic_istream& operator>>(basic_istream& (* Pfn)(basic_istream&));
basic_istream& operator>>(ios_base& (* Pfn)(ios_base&));
basic_istream& operator>>(basic_ios<Char_T, Tr>& (* Pfn)(basic_ios<Char_T, Tr>&));
basic_istream& operator>>(basic_streambuf<Char_T, Tr>* strbuf);
basic_istream& operator>>(bool& val);
basic_istream& operator>>(short& val);
basic_istream& operator>>(unsigned short& val);
basic_istream& operator>>(int& val);
basic_istream& operator>>(unsigned int& val);
basic_istream& operator>>(long& val);
basic_istream& operator>>(unsigned long& val);
basic_istream& operator>>(long long& val);
basic_istream& operator>>(unsigned long long& val);
basic_istream& operator>>(void *& val);
basic_istream& operator>>(float& val);
basic_istream& operator>>(double& val);
basic_istream& operator>>(long double& val);

パラメーター

Pfn
関数ポインター。

strbuf
stream_buf 型オブジェクト。

val
ストリームから読み取る値。

戻り値

ストリーム (*this)。

解説

<istream> ヘッダーは複数のグローバル抽出演算子も定義します。 詳細については、operator>> (\<istream>)を参照してください。

最初のメンバー関数では、istr >> ws 形式の式によって ws(istr) が呼び出され、*this が返されることを保証します。 詳細については、wsを参照してください。

2 番目と 3 番目の関数は、hex などの他のマニピュレーターが同じように動作することを保証します。 残りの関数は、書式設定された入力関数です。

関数は、次のことを行います。

basic_istream& operator>>(
    basic_streambuf<Char_T, Tr>* strbuf);

null ポインターでない場合 strbuf は要素を抽出し、〘〗〘に strbuf挿入します。 抽出は、ファイルの終わりで停止します。 また、挿入が失敗した場合または (キャッチされるが再スローされない) 例外をスローする場合は、対象の要素を抽出せずに停止します。 この関数は要素を抽出しない場合、setstate(failbit) を呼び出します。 いずれの場合も、この関数は を返します *this。 詳細については、setstateを参照してください。

関数は、次のことを行います。

basic_istream& operator>>(bool& val);

フィールドを抽出し、use_facet< num_get<Char_T, InIt>(getloc).get( InIt(rdbuf), Init(0), *this, getloc, val) を呼び出してブール値に変換します。 ここで、InItistreambuf_iterator<Char_T, Tr> として定義されます。 *this が返されます。

詳細については、use_facetgetlocgetrdbufistreambuf_iterator を参照してください。

次の各関数は、

basic_istream& operator>>(short& val);
basic_istream& operator>>(unsigned short& val);
basic_istream& operator>>(int& val);
basic_istream& operator>>(unsigned int& val);
basic_istream& operator>>(long& val);
basic_istream& operator>>(unsigned long& val);
basic_istream& operator>>(long long& val);
basic_istream& operator>>(unsigned long long& val);
basic_istream& operator>>(void *& val);

フィールドを抽出し、use_facet<num_get<Char_T, InIt>(getloc).get(InIt(rdbuf), Init(0), *this, getloc, val) を呼び出して数値に変換します。 ここでは、InItistreambuf_iterator<Char_T, Tr> として定義され、val の型は必要に応じて longunsigned long、または void * になります。

変換後の値を val の型として表すことができない場合、関数では setstate(failbit) を呼び出します。 いずれの場合も、この関数は を返します *this。 詳細については、setstateを参照してください。

次の各関数は、

basic_istream& operator>>(float& val);
basic_istream& operator>>(double& val);
basic_istream& operator>>(long double& val);

フィールドを抽出し、use_facet<num_get<Char_T, InIt>(getloc).get(InIt(rdbuf), Init(0), *this, getloc, val) を呼び出して数値に変換します。 ここでは、InItistreambuf_iterator<Char_T, Tr> として定義され、val の型は必要に応じて double または long double になります。

変換後の値を val の型として表すことができない場合、関数では setstate(failbit) を呼び出します。 いずれの場合も、*this を返します。

// istream_basic_istream_op_is.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;

ios_base& hex2( ios_base& ib )
{
   ib.unsetf( ios_base::dec );
   ib.setf( ios_base::hex );
   return ib;
}

basic_istream<char, char_traits<char> >& somefunc(basic_istream<char, char_traits<char> > &i)
{
   if ( i == cin )
   {
      cerr << "i is cin" << endl;
   }
   return i;
}

int main( )
{
   int i = 0;
   cin >> somefunc;
   cin >> i;
   cout << i << endl;
   cin >> hex2;
   cin >> i;
   cout << i << endl;
}

basic_istream::operator=

演算子の右辺の basic_istream をこのオブジェクトに代入します。 これは、コピーを残さない rvalue 参照を伴う移動代入です。

basic_istream& operator=(basic_istream&& right);

パラメーター

right
basic_ifstream オブジェクトへの rvalue 参照。

戻り値

*this を返します。

解説

このメンバー演算子は、swap(right) を呼び出します。

basic_istream::peek

読み取る次の文字を返します。

int_type peek();

戻り値

読み取る次の文字。

解説

これらの書式設定されていない入力関数は、可能であれば、rdbuf->sgetc を返すように、要素を抽出します。 それ以外の場合は traits_type::eofを返します。 詳細については、次のトピックを参照してください。 sgetc および eof

// basic_istream_peek.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

int main( )
{
   char c[10], c2;
   cout << "Type 'abcde': ";

   c2 = cin.peek( );
   cin.getline( &c[0], 9 );

   cout << c2 << " " << c << endl;
}
abcde
Type 'abcde': abcde
a abcde

basic_istream::putback

ストリームに指定された文字を配置します。

basic_istream<Char_T, Tr>& putback(
    char_type Ch);

パラメーター

Ch
ストリームに戻す文字。

戻り値

ストリーム (*this)。

解説

書式設定されていない入力関数では、可能な場合には rdbuf->sputbackc を呼び出すのと同じように Ch を戻します。 rdbuf が Null ポインターの場合、または sputbackc の呼び出しが traits_type::eof を返す場合、関数は setstate(badbit) を呼び出します。 いずれの場合も、*this を返します。

詳細については、「rdbuf」、「sputbackc」、「eof」、および「setstate」を参照してください。

// basic_istream_putback.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

int main( )
{
   char c[10], c2, c3;

   c2 = cin.get( );
   c3 = cin.get( );
   cin.putback( c2 );
   cin.getline( &c[0], 9 );
   cout << c << endl;
}
qwq

basic_istream::read

指定された数の文字をストリームから読み取り、配列に保存します。

渡された値が正しいことの確認を呼び出し元に依存するため、このメソッドは安全ではない可能性があります。

basic_istream<Char_T, Tr>& read(
    char_type* str,
    streamsize count);

パラメーター

str
文字の読み取り先の配列。

count
読み取る文字の数。

戻り値

ストリーム ( *this)。

解説

書式設定されていない入力関数では、最大 count の要素を抽出し、それらを str で始まる配列に格納します。 抽出はファイルの終わりの早い段階で停止します。この場合、関数は setstate(failbit) を呼び出します。 いずれの場合も、*this を返します。 詳細については、setstateを参照してください。

// basic_istream_read.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

int main()
{
    char c[10];
    int count = 5;

    cout << "Type 'abcde': ";

    // Note: cin::read is potentially unsafe, consider
    // using cin::_Read_s instead.
    cin.read(&c[0], count);
    c[count] = 0;

    cout << c << endl;
}
abcde
Type 'abcde': abcde
abcde

basic_istream::readsome

指定した文字の値の数を読み取ります。

渡された値が正しいことの確認を呼び出し元に依存するため、このメソッドは安全ではない可能性があります。

streamsize readsome(
    char_type* str,
    streamsize count);

パラメーター

str
readsome が読み取る文字を格納する配列。

count
読み取る文字の数。

戻り値

実際に読み取った文字数、gcount

解説

この書式設定されていない入力関数は、最大 count の要素を入力ストリームから抽出し、それらを配列 str に格納します。

この関数は入力を待機しません。 使用できる任意のデータを読み取ります。

// basic_istream_readsome.cpp
// compile with: /EHsc /W3
#include <iostream>
using namespace std;

int main( )
{
   char c[10];
   int count = 5;

   cout << "Type 'abcdefgh': ";

   // cin.read blocks until user types input.
   // Note: cin::read is potentially unsafe, consider
   // using cin::_Read_s instead.
   cin.read(&c[0], 2);

   // Note: cin::readsome is potentially unsafe, consider
   // using cin::_Readsome_s instead.
   int n = cin.readsome(&c[0], count);  // C4996
   c[n] = 0;
   cout << n << " characters read" << endl;
   cout << c << endl;
}

basic_istream::seekg

ストリームでの読み取り位置を移動させます。

basic_istream<Char_T, Tr>& seekg(pos_type pos);

basic_istream<Char_T, Tr>& seekg(off_type off, ios_base::seekdir way);

パラメーター

pos
読み取りポインターの移動先の絶対位置。

off
way に対して相対的に読み取りポインターを移動するオフセット。

way
列挙体の ios_base::seekdir 1 つ。

戻り値

ストリーム (*this)。

解説

1 つ目のメンバー関数は絶対シークを実行し、2 つ目のメンバー関数は相対シークを実行します。

Note

標準 C++ ではテキスト ファイルでの相対シークをサポートしていないため、2 つ目のメンバー関数をテキスト ファイルで使用しないでください。

failfalse の場合、最初のメンバー関数では、一部の pos_type 一時オブジェクト newpos に対して newpos = rdbuf->pubseekpos(pos) を呼び出します。 failfalse の場合、2 番目の関数では newpos = rdbuf->pubseekoff( off, way) を呼び出します。 いずれの場合も、(off_type)newpos == (off_type)(-1) (位置指定操作が失敗) の場合、関数は istr.setstate(failbit) を呼び出します。 どちらの関数も *this を返します。

failtrue の場合、メンバー関数では何もしません。

詳細については、「rdbuf」、「pubseekpos」、「pubseekoff」、および「setstate」を参照してください。

// basic_istream_seekg.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main ( )
{
   using namespace std;
   ifstream file;
   char c, c1;

   file.open( "basic_istream_seekg.txt" );
   file.seekg(2);   // seek to position 2
   file >> c;
   cout << c << endl;
}

basic_istream::sentry

この入れ子になったクラスは、オブジェクトの宣言が書式設定された入力関数と書式設定されていない入力関数を構築するオブジェクトについて記述します。

class sentry {
   public:
   explicit sentry(
      basic_istream<Char_T, Tr>& _Istr,
      bool _Noskip = false);
   operator bool() const;
   };

解説

_Istr.goodtrue の場合、コンストラクターでは、

  • null ポインターでない場合_Istr.tieに呼び出_Istr.tie->flushします。

  • _Istr.flags & skipws がゼロ以外の場合は、実質的に ws(_Istr) を呼び出します。

このような準備の後に _Istr.goodfalse の場合、コンストラクターでは _Istr.setstate(failbit) を呼び出します。 いずれの場合も、コンストラクターは、_Istr.good で返された値を status に格納します。 後で operator bool を呼び出すと、この格納された値が配信されます。

詳細については、goodtieflushwsflagsskipwssetstate を参照してください。

basic_istream::swap

2 つの basic_istream オブジェクトの内容を交換します。

void swap(basic_istream& right);

パラメーター

right
basic_istream オブジェクトへの lvalue 参照。

解説

メンバー関数は、basic_ios::swap(right) を呼び出します。 また、抽出カウントを right の抽出カウントと交換します。 詳細については、basic_ios::swapを参照してください。

basic_istream::sync

ストリームに関連付けられた入力デバイスをストリームのバッファーと同期します。

int sync();

戻り値

rdbuf が Null ポインターの場合、この関数は -1 を返します。 そうでない場合は、rdbuf->pubsync を呼び出します。 この呼び出しで-1 が返された場合、関数は setstate(badbit) を呼び出し、-1 を返します。 それ以外の場合、関数は 0 を返します。 詳細については、次のトピックを参照してください。 pubsync および setstate

basic_istream::tellg

ストリーム内の現在の読み取り位置を報告します。

pos_type tellg();

戻り値

ストリームの現在の位置。

解説

failfalse の場合、メンバー関数では rdbuf->pubseekoff(0, cur, in) を返します。 それ以外の場合は pos_type(-1)を返します。 詳細については、次のトピックを参照してください。 rdbuf および pubseekoff

// basic_istream_tellg.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main()
{
    using namespace std;
    ifstream file;
    char c;
    streamoff i;

    file.open("basic_istream_tellg.txt");
    i = file.tellg();
    file >> c;
    cout << c << " " << i << endl;

    i = file.tellg();
    file >> c;
    cout << c << " " << i << endl;
}

basic_istream::unget

最後に読み取った文字をストリームに戻します。

basic_istream<Char_T, Tr>& unget();

戻り値

ストリーム (*this)。

解説

書式設定されていない入力関数では、可能であれば、rdbuf->sungetc を呼び出した場合と同じように、前の要素をストリームに戻します。rdbuf が null ポインターの場合、または sungetc の呼び出しで traits_type::eof が返される場合、関数では setstate(badbit) を呼び出します。 いずれの場合も、*this を返します。

詳細については、「sungetceofおよび「setstate」を参照してください。 また、unget がどのように失敗する可能性があるかについては、「basic_streambuf::sungetc」を参照してください。

// basic_istream_unget.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

int main( )
{
   char c[10], c2;

   cout << "Type 'abc': ";
   c2 = cin.get( );
   cin.unget( );
   cin.getline( &c[0], 9 );
   cout << c << endl;
}
abc
Type 'abc': abc
abc

関連項目

C++ 標準ライブラリ内のスレッド セーフ
iostream プログラミング
iostreams の規則