Namespaces
Variants

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

From cppreference.net
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 を抽出する。その後:
13) 先行する空白をスキップする可能性のある int 値を抽出します。値は指定された参照 value に格納されます。
この関数は FormattedInputFunction として動作する。セントリオブジェクトを構築・チェックした後(先頭の空白をスキップする可能性がある)、 std::num_get::get() を呼び出して long lval を抽出する。その後:
14) 拡張浮動小数点値を抽出し、先行する空白文字をスキップする可能性があります。値は指定された参照 value に格納されます。ライブラリは、パラメータ value の参照型として、すべてのcv修飾されていない extended floating-point types に対するオーバーロードを提供します。
標準浮動小数点型 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 に格納する。抽出は以下のいずれかの条件が満たされた時点で停止する:
  • 入力シーケンスでファイル終端が発生した場合;
  • 出力シーケンスへの挿入が失敗した場合(この場合、挿入対象の文字は抽出されない);
  • 例外が発生した場合(この場合、例外は捕捉され、文字が一つも挿入されずかつ failbit exceptions() で有効になっている場合にのみ再スローされる)。
いずれの場合も、抽出された文字数を後続の gcount() 呼び出しでアクセスされるメンバ変数に格納する。 sb が null ポインタであるか、または sb に文字が一つも挿入されなかった場合、 setstate ( failbit ) を呼び出す(有効な場合 std::ios_base::failure をスローする可能性がある)。

抽出が失敗した場合(例えば数字が期待される場所に文字が入力された場合)、 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 のみを再スローできるかどうかが不明確
捕捉されたすべての例外を
再スロー可能
LWG 118 C++98 オーバーロード (12,13) は抽出を num_get::get に委譲していたが、
これは short および int のオーバーロードを持たない
short または int の代わりに
long 値が抽出される
LWG 413 C++98 オーバーロード (18) sb からの文字抽出中にスローされた例外のみを
再スローしていたが、文字は * this から抽出される
sb * this に修正
LWG 567 C++98 オーバーロード (18) LWG issue 60 の解決により
FormattedInputFunction として動作していた
これは
UnformattedInputFunction として動作する
LWG 661 C++98 オーバーロード (12,13) LWG issue 118 の解決により
抽出された数値を value に格納していなかった
オーバーフローが発生しなければ
数値を格納する
LWG 696 C++98 抽出失敗時に value が変更されなかった ゼロまたは最小値/
最大値に設定される

関連項目

文字と文字配列を抽出する
(関数テンプレート)
文字列に対するストリーム入出力を実行する
(関数テンプレート)
ビットセットのストリーム入出力を実行する
(関数テンプレート)
複素数のシリアライズとデシリアライズを実行する
(関数テンプレート)
擬似乱数エンジンに対するストリーム入出力を実行する
(関数テンプレート)
擬似乱数分布に対するストリーム入出力を実行する
(関数テンプレート)
文字ブロックを抽出する
(公開メンバ関数)
利用可能な文字ブロックを抽出する
(公開メンバ関数)
文字を抽出する
(公開メンバ関数)
指定された文字が見つかるまで文字を抽出する
(公開メンバ関数)
(C++17)
文字シーケンスを整数値または浮動小数点値に変換する
(関数)