std::basic_istream<CharT,Traits>:: get
|
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 s として動作します。セントリオブジェクトの構築とチェックを行った後、これらの関数は以下を実行します:
- count が 1 未満であるか、 count - 1 文字が格納された場合。
- 入力シーケンスでEOF状態が発生した場合( setstate ( eofbit ) が呼び出されます)。
-
次に利用可能な入力文字
c
が
delim
と等しい場合(
Traits
::
eq
(
c, delim
)
によって判定)。この文字は抽出されません(
getline()とは異なります)。
- 入力シーケンスでEOF(ファイル終端)状態が発生した場合。
- 出力シーケンスへの挿入が失敗した場合(この場合、挿入できなかった文字は抽出されません)。
- 次に利用可能な入力文字 c が delim と等しい場合( Traits :: eq ( c, delim ) によって判定)。この文字は抽出されません。
- 例外が発生した場合(この場合、例外はキャッチされ再スローされません)。
文字が抽出されなかった場合、 setstate ( failbit ) を呼び出します。
すべてのバージョンは、 gcount() の値を抽出された文字数に設定します。
目次 |
パラメータ
| ch | - | 結果を書き込む文字への参照 |
| s | - | 格納する文字列へのポインタ |
| count | - | s が指す文字列のサイズ |
| delim | - | 抽出を停止する区切り文字。抽出されず、格納もされない |
| strbuf | - | コンテンツを読み取るストリームバッファ |
戻り値
例外
内部操作が例外をスローした場合、それは捕捉され、
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 が非正の場合を 扱えなかった |
この場合、文字は
抽出されない |
関連項目
|
文字ブロックを抽出する
(公開メンバ関数) |
|
|
書式付きデータを抽出する
(公開メンバ関数) |
|
|
文字と文字配列を抽出する
(関数テンプレート) |