名前空間
変種
操作

std::basic_istream<CharT,Traits>::get

From cppreference.com
< cpp‎ | io‎ | basic istream
 
 
 
 
int_type get();
(1)
basic_istream& get( char_type& ch );
(2)
basic_istream& get( char_type* s, std::streamsize count );
(3)
basic_istream& get( char_type* s, std::streamsize count, char_type delim );
(4)
basic_istream& get( basic_streambuf& strbuf );
(5)
basic_istream& get( basic_streambuf& strbuf, char_type delim );
(6)

ストリームから文字または文字列を抽出します。

すべてのオーバーロードは、UnformattedInputFunction として動作します。セントリーオブジェクトを構築し、チェックした後、これらの関数は以下を実行します。

1) 利用可能な文字を1つ読み込み、それを返します。利用できない場合は、Traits::eof() を返し、failbit および eofbit を設定します。
2) 利用可能な文字を1つ読み込み、ch に格納します。利用できない場合は、ch は変更されず、failbit および eofbit が設定されます。フォーマットされた文字入力演算子>>とは異なり、この関数は signed char および unsigned char の型ではオーバーロードされていないことに注意してください。
3) get(s, count, widen('\n')) と同じです。つまり、最大 std::max(0, count - 1) 文字を読み込み、'\n' が見つかるまで、s が指す文字配列に格納します。
4) 文字を読み込み、s が指す文字配列の successive locations に格納します。以下のいずれかの条件が発生するまで、文字が抽出され格納されます。
  • count1 未満であるか、または count - 1 文字が格納された。
  • 入力シーケンスでファイルの終端条件が発生した(setstate(eofbit) が呼び出される)。
  • 次に利用可能な入力文字 cdelim と等しい(Traits::eq(c, delim) によって判定される)。この文字は抽出されません(getline() とは異なり)。
いずれの場合も、if ( count > 0 )、配列の次の successive location にヌル文字(CharT())が格納されます。
5) get(strbuf, widen('\n')) と同じです。つまり、利用可能な文字を読み込み、指定された basic_streambuf オブジェクトに挿入します。`'\n'` が見つかるまで挿入されます。
6) 文字を読み込み、指定された basic_streambuf オブジェクトによって制御される出力シーケンスに挿入します。以下のいずれかの条件が発生するまで、文字が抽出され strbuf に挿入されます。
  • 入力シーケンスでファイルの終端条件が発生した。
  • 出力シーケンスへの挿入が失敗した(この場合、挿入できなかった文字は抽出されません)。
  • 次に利用可能な入力文字 cdelim と等しい(Traits::eq(c, delim) によって判定される)。この文字は抽出されません。
  • 例外が発生した(この場合、例外はキャッチされ、再スローされません)。

文字が抽出されなかった場合、setstate(failbit) を呼び出します。

すべてのオーバーロードで、gcount() の値は抽出された文字数に設定されます。

目次

[編集] パラメータ

文字 - 結果を書き込む文字への参照
s - 文字を格納する文字文字列へのポインタ
count - s が指す文字文字列のサイズ
delim - 抽出を停止する区切り文字。抽出も格納もされません。
strbuf - 読み込み先のストリームバッファ

[編集] 戻り値

1) 抽出された文字、または Traits::eof()
2-6) *this

[編集] 例外

failure: エラーが発生した場合(エラー状態フラグが goodbit ではない)で、exceptions() がその状態に対してスローするように設定されている場合。

内部操作が例外をスローした場合、それはキャッチされ、badbit が設定されます。exceptions()badbit に対して設定されている場合、例外は再スローされます。

[編集]

#include <iostream>
#include <sstream>
 
int main()
{
    std::istringstream s1("Hello, world.");
    char c1 = s1.get(); // reads 'H'
    std::cout << "after reading " << c1 << ", gcount() == " <<  s1.gcount() << '\n';
 
    char c2;
    s1.get(c2);         // reads 'e'
    char str[5];
    s1.get(str, 5);     // reads "llo,"
    std::cout << "after reading " << str << ", gcount() == " <<  s1.gcount() << '\n';
 
    std::cout << c1 << c2 << str;
    s1.get(*std::cout.rdbuf()); // reads the rest, not including '\n'
    std::cout << "\nAfter the last get(), gcount() == " << s1.gcount() << '\n';
}

出力

after reading H, gcount() == 1
after reading llo,, gcount() == 4
Hello, world.
After the last get(), gcount() == 7

[編集] 不具合報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
LWG 370 C++98 オーバーロード (5) の効果は get(s, count, widen('\n')) でした。
これはオーバーロード (3) の効果です。
に修正されました
get(strbuf, widen('\n'))
LWG 531 C++98 オーバーロード (3,4) は、
count が非正の場合を処理できませんでした。
この場合、文字は
抽出されません。

[編集] 関連項目

文字のブロックを抽出する
(public member function) [編集]
書式付きデータを抽出する
(public member function) [編集]
文字と文字配列を抽出する
(function template) [編集]
English 日本語 中文(简体) 中文(繁體)