std::basic_istream<CharT,Traits>::operator>>
From cppreference.com
< cpp | io | basic istream
| basic_istream& operator>>( unsigned short& value ); |
(1) | |
| basic_istream& operator>>( unsigned int& value ); |
(2) | |
| basic_istream& operator>>( long& value ); |
(3) | |
| basic_istream& operator>>( unsigned long& value ); |
(4) | |
| basic_istream& operator>>( long long& value ); |
(5) | (C++11以降) |
| basic_istream& operator>>( unsigned long long& value ); |
(6) | (C++11以降) |
| basic_istream& operator>>( float& value ); |
(7) | |
| basic_istream& operator>>( double& value ); |
(8) | |
| basic_istream& operator>>( long double& value ); |
(9) | |
| basic_istream& operator>>( bool& value ); |
(10) | |
| basic_istream& operator>>( void*& value ); |
(11) | |
| basic_istream& operator>>( short& value ); |
(12) | |
| basic_istream& operator>>( int& value ); |
(13) | |
basic_istream& operator>>( /* extended-floating-point-type */& value ); |
(14) | (C++23から) |
| basic_istream& operator>>( std::ios_base& (*func)(std::ios_base&) ); |
(15) | |
| basic_istream& operator>>( std::basic_ios<CharT, Traits>& (*func)(std::basic_ios<CharT, Traits>&) ); |
(16) | |
| basic_istream& operator>>( basic_istream& (*func)(basic_istream&) ); |
(17) | |
| basic_istream& operator>>( std::basic_streambuf<CharT, Traits>* sb ); |
(18) | |
入力ストリームから値を抽出します。
1-11) 先行する空白をスキップして値を抽出します。抽出された値は、指定された参照 value に格納されます。
この関数は FormattedInputFunction として動作します。セントリーオブジェクトを構築してチェックした後(この際、先頭の空白がスキップされる場合があります)、std::num_get::get() を呼び出して値を抽出します。
12) 先行する空白をスキップして short 型の値を抽出します。抽出された値は、指定された参照 value に格納されます。
この関数は FormattedInputFunction として動作します。セントリーオブジェクトを構築してチェックした後(この際、先頭の空白がスキップされる場合があります)、std::num_get::get() を呼び出して long 型の値 lval を抽出します。その後、
- lval < std::numeric_limits<short>::min() の場合、
failbitが設定され、std::numeric_limits<short>::min() が val に格納されます。 - それ以外の場合、std::numeric_limits<short>::max() < lval の場合、
failbitが設定され、std::numeric_limits<short>::max() が val に格納されます。 - それ以外の場合、static_cast<short>(lval) が val に格納されます。
13) 先行する空白をスキップして int 型の値を抽出します。抽出された値は、指定された参照 value に格納されます。
この関数は FormattedInputFunction として動作します。セントリーオブジェクトを構築してチェックした後(この際、先頭の空白がスキップされる場合があります)、std::num_get::get() を呼び出して long 型の値 lval を抽出します。その後、
- lval < std::numeric_limits<int>::min() の場合、
failbitが設定され、std::numeric_limits<int>::min() が val に格納されます。 - それ以外の場合、std::numeric_limits<int>::max() < lval の場合、
failbitが設定され、std::numeric_limits<int>::max() が val に格納されます。 - それ以外の場合、static_cast<int>(lval) が val に格納されます。
14) 先行する空白をスキップして、拡張浮動小数点型 の値を抽出します。抽出された値は、指定された参照 value に格納されます。ライブラリは、パラメータ value の参照型として、すべての cv-修飾されていない 拡張浮動小数点型 のためのオーバーロードを提供します。
標準浮動小数点型
FP を次のように決定します。- /* extended-floating-point-type */ の 浮動小数点変換ランク が float のそれ以下である場合、
FPは float になります。 - それ以外の場合、/* extended-floating-point-type */ の浮動小数点変換ランクが double のそれ以下である場合、
FPは double になります。 - それ以外の場合、
FPは long double になります。
この関数は FormattedInputFunction として動作します。セントリーオブジェクトを構築してチェックした後(この際、先頭の空白がスキップされる場合があります)、std::num_get::get() を呼び出して
FP 型の値 fval を抽出します。その後、- fval < -std::numeric_limits</* extended-floating-point-type */>::max() の場合、
failbitが設定され、-std::numeric_limits</* extended-floating-point-type */>::max() が val に格納されます。 - それ以外の場合、std::numeric_limits</* extended-floating-point-type */>::max() < fval の場合、
failbitが設定され、std::numeric_limits</* extended-floating-point-type */>::max() が val に格納されます。 - それ以外の場合、static_cast</* extended-floating-point-type */>(fval) が val に格納されます。
15-17) func(*this) を呼び出します。ここで func は I/O マニピュレーターです。
18) UnformattedInputFunction として動作します。セントリーオブジェクトを構築してチェックした後、**this からすべてのデータを抽出し、sb に格納します。抽出は、以下のいずれかの条件が満たされた場合に停止します。
- 入力シーケンスでファイル終端が発生した場合。
- 出力シーケンスへの挿入が失敗した場合(この場合、挿入される文字は抽出されません)。
- 例外が発生した場合(この場合、例外はキャッチされ、文字を挿入せず、かつ
exceptions()でfailbitが有効になっている場合のみ再スローされます)。
抽出が失敗した場合(例:数字が期待される場所で文字が入力された場合)、value にゼロが書き込まれ、failbit が設定されます。符号付き整数の場合、抽出結果が value に収まる値よりも大きいか小さい場合、それぞれ std::numeric_limits<T>::max() または std::numeric_limits<T>::min() が書き込まれ、failbit フラグが設定されます。符号なし整数の場合、抽出結果が value に収まる値よりも大きいか小さい場合、std::numeric_limits<T>::max() が書き込まれ、failbit フラグが設定されます。
目次 |
[編集] パラメータ
| value | - | 抽出された値を格納する整数または浮動小数点値への参照 |
| func | - | I/O マニピュレーター関数へのポインター |
| sb | - | すべてのデータを書き込むストリームバッファーへのポインター |
[編集] 戻り値
1-16,18) **this
17) func(*this)
[編集] 注釈
オーバーロード (14) では、拡張浮動小数点型が標準浮動小数点型と異なる浮動小数点変換ランクを持つ場合、変換時の二重丸めにより不正確な結果が生じる可能性があります。最大精度が重要な状況では、std::from_chars() を使用できます。
[編集] 例
このコードを実行
#include <iomanip> #include <iostream> #include <sstream> int main() { std::string input = "41 3.14 false hello world"; std::istringstream stream(input); int n; double f; bool b; stream >> n >> f >> std::boolalpha >> b; std::cout << "n = " << n << '\n' << "f = " << f << '\n' << "b = " << std::boolalpha << b << '\n'; // extract the rest using the streambuf overload stream >> std::cout.rdbuf(); std::cout << '\n'; }
出力
n = 41 f = 3.14 b = false hello world
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 64 | C++98 | オーバーロード (18) は、setstate(failbit) の呼び出しによってスローされた std::ios_base::failure のみを再スローできるのか |
キャッチされたすべての例外を 再スローできるのか |
| 不明確でした。 | C++98 | LWG 118 オーバーロード (12,13) は num_get::get に抽出を委譲していましたが、 |
short および int のオーバーロードを持っていませんでした。 long 値が抽出されていました。 |
| 代わりに short または int が抽出されるべきでした。 | C++98 | LWG 413 オーバーロード (18) は、sb から文字を抽出中にスローされた例外のみを再スローしていましたが、文字は **this から抽出されます。 |
sb が **this に修正されました。 |
| LWG 567 | C++98 | オーバーロード (18) は FormattedInputFunction として動作していましたが、 それは |
それは UnformattedInputFunction として動作します。 UnformattedInputFunction |
| LWG 661 | C++98 | オーバーロード (12,13) は、LWG issue 118 の解決により、抽出された数値を value に格納していませんでした。 |
オーバーフローが発生しない場合 数値が格納されます。 |
| LWG 696 | C++98 | 抽出失敗時に value は変更されず、 | ゼロまたは最小値/最大値に 設定されていました。 |
[編集] 関連項目
| 文字と文字配列を抽出する (function template) | |
| 文字列に対するストリーム入出力を実行する (function template) | |
| ビットセットのストリーム入出力を実行する (function template) | |
| 複素数をシリアライズ・デシリアライズする (関数テンプレート) | |
| (C++11) |
疑似乱数エンジンのストリーム入出力を実行 (関数テンプレート) |
| (C++11) |
疑似乱数分布のストリーム入出力を実行 (関数テンプレート) |
| 文字のブロックを抽出する (public member function) | |
| すでに利用可能な文字のブロックを抽出する (public member function) | |
| 文字を抽出する (public member function) | |
| 指定された文字が見つかるまで文字を抽出する (public member function) | |
| (C++17) |
文字シーケンスを整数値または浮動小数点数値に変換する (関数) |