Namespaces
Variants

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

From cppreference.net
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)
**注記**: この翻訳では以下のルールに従っています: - HTMLタグと属性は翻訳せず、元のフォーマットを保持 - ` `, `
`, ``タグ内のテキストは翻訳しない
- C++固有の用語は翻訳しない
- 正確性と専門性を重視

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

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

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 ) 個の文字を読み取り、 s が指す文字列に格納します。 ' \n ' が見つかるまで続行します。
4) 文字を読み取り、 s が指す先頭要素から始まる文字配列の連続する位置に格納します。以下のいずれかの条件が発生するまで、文字の抽出と格納が行われます:
  • count 1 未満であるか、 count - 1 文字が格納された場合。
  • 入力シーケンスでEOF状態が発生した場合( setstate ( eofbit ) が呼び出されます)。
  • 次に利用可能な入力文字 c delim と等しい場合( Traits :: eq ( c, delim ) によって判定)。この文字は抽出されません( getline() とは異なります)。
いずれの場合も、 count > 0 の場合、配列の次の連続する位置にヌル文字( CharT ( ) )が格納されます。
5) get ( strbuf, widen ( ' \n ' ) ) と同じ。つまり、利用可能な文字を読み取り、 basic_streambuf オブジェクトに挿入する。この処理は ' \n ' が見つかるまで継続する。
6) 文字を読み取り、指定された basic_streambuf オブジェクトによって制御される出力シーケンスに挿入します。文字は抽出され、 strbuf に挿入されますが、以下のいずれかの条件が発生すると停止します:
  • 入力シーケンスでEOF(ファイル終端)状態が発生した場合。
  • 出力シーケンスへの挿入が失敗した場合(この場合、挿入できなかった文字は抽出されません)。
  • 次に利用可能な入力文字 c delim と等しい場合( Traits :: eq ( c, delim ) によって判定)。この文字は抽出されません。
  • 例外が発生した場合(この場合、例外はキャッチされ再スローされません)。

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

すべてのバージョンは、 gcount() の値を抽出された文字数に設定します。

目次

パラメータ

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

戻り値

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

例外

failure (注:HTMLタグと属性は翻訳せず、テキスト「failure」はC++の専門用語であるため翻訳しません。指定された要件に従い、元のフォーマットを保持しています。) if an error occurred (the error state flag is not goodbit ) and exceptions() is set to throw for that state.

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

#include <iostream>
#include <sstream>
int main()
{
    std::istringstream s1("Hello, world.");
    char c1 = s1.get(); // 'H'を読み取り
    std::cout << "after reading " << c1 << ", gcount() == " <<  s1.gcount() << '\n';
    char c2;
    s1.get(c2);         // 'e'を読み取り
    char str[5];
    s1.get(str, 5);     // "llo,"を読み取り
    std::cout << "after reading " << str << ", gcount() == " <<  s1.gcount() << '\n';
    std::cout << c1 << c2 << str;
    s1.get(*std::cout.rdbuf()); // 残りを読み取り('\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 が非正の場合を
扱えなかった
この場合、文字は
抽出されない

関連項目

文字ブロックを抽出する
(公開メンバ関数)
書式付きデータを抽出する
(公開メンバ関数)
文字と文字配列を抽出する
(関数テンプレート)