Skip to content

Latest commit

 

History

History
129 lines (101 loc) · 5.65 KB

op_istream.md

File metadata and controls

129 lines (101 loc) · 5.65 KB

operator>>

  • istream[meta header]
  • std[meta namespace]
  • basic_istream[meta class]
  • function[meta id-type]
// マニピュレータ
// 3つとも関数へのポインタを引数に取る。
basic_istream<CharT, Traits>&
  operator>>(basic_istream<CharT, Traits>& (*pf)(basic_istream<CharT, Traits>&)); // (1) C++03
basic_istream<CharT, Traits>&
  operator>>(basic_ios<CharT, Traits>& (*pf)(basic_ios<CharT, Traits>&));         // (2) C++03
basic_istream<CharT, Traits>&
  operator>>(ios_base& (*pf)(ios_base&));                                         // (3) C++03

// bool値・数値・ポインタ
basic_istream<CharT, Traits>& operator>>(bool& n);               // (4) C++03
basic_istream<CharT, Traits>& operator>>(short& n);              // (5) C++03
basic_istream<CharT, Traits>& operator>>(unsigned short& n);     // (6) C++03
basic_istream<CharT, Traits>& operator>>(int& n);                // (7) C++03
basic_istream<CharT, Traits>& operator>>(unsigned int& n);       // (8) C++03
basic_istream<CharT, Traits>& operator>>(long& n);               // (9) C++03
basic_istream<CharT, Traits>& operator>>(unsigned long& n);      // (10) C++03
basic_istream<CharT, Traits>& operator>>(long long& n);          // (11) C++11
basic_istream<CharT, Traits>& operator>>(unsigned long long& n); // (12) C++11
basic_istream<CharT, Traits>& operator>>(float& f);              // (13) C++03
basic_istream<CharT, Traits>& operator>>(double& f);             // (14) C++03
basic_istream<CharT, Traits>& operator>>(long double& f);        // (15) C++03
basic_istream<CharT, Traits>&
  operator>>(extended-floating-point-type& f);                   // (16) C++23
basic_istream<CharT, Traits>& operator>>(void*& p);              // (17) C++03

// ストリームバッファ
basic_istream<CharT, Traits>&
  operator>>(basic_streambuf<char_type, Traits>* sb); // (18) C++03

概要

ストリームからの入力またはマニピュレータの実行を行う。

  • (1)-(3) : マニピュレータを実行するオーバーロードそれ自体は、書式化入力関数・非書式化入力関数いずれにも該当しない。
    • マニピュレータが書式化入力関数・非書式化入力関数であるということはあり得る(例: ws)。
  • (4)-(17) : 数値型(boolも含む)とvoid*に対するオーバーロードは、書式化入力関数である。
  • (18) : basic_streambufに対するオーバーロードは、非書式化入力関数である。

効果

(1)-(3) : マニピュレータ

  1. pf(*this)を呼び出す。

(4)-(17) : bool値・数値・ポインタ

  1. sentryオブジェクトを構築する。sentryオブジェクトが失敗を示した場合、何もしない
  2. num_get::getを使用して入力のパース・数値への変換を行う。
    • intshort : longを実引数に取るものを使用する。結果がintshortそれぞれの範囲外の値になった場合、failbitを追加する
    • 拡張浮動小数点数型 :
      • 拡張浮動小数点数型の変換順位がlong doubleより大きい場合、条件付きサポートとなる
      • そうでない場合、対応する標準浮動小数点数型FPを以下のように定義し、FP型の値として値を入力したあと、拡張浮動小数点数型にキャストして代入する
        • 拡張浮動小数点数型の変換順位がfloat以下の場合、FPfloatとする
        • そうでなく、拡張浮動小数点数型の変換順位がdouble以下の場合、FPdoubleとする
        • そうでない場合、FPlong doubleとする
  3. num_get::getから得られたiostate値を実引数にしてsetstate関数を呼び出す

(18) : ストリームバッファ

ストリームからの入力を別のストリームバッファに出力する。

  1. 仮引数sbがヌルポインタの場合、setstate(failbit)を呼び出して終了する
  2. sentryオブジェクトを構築する。sentryオブジェクトが失敗を示した場合、何もしない
  3. 以下のいずれかを満たすまで、this内のストリームバッファから文字を入力してsbへ出力する
    • EOFに達した
    • 出力処理に失敗した(この場合、失敗したときの文字は入力側のストリームバッファに戻される)
    • 例外が発生した

入力がなされなかった場合、setstate(failbit)を呼び出す。

戻り値

*this

例(数値)

#include <iostream>

int main() {
  int x;
  // 好きな整数を入力してください
  if (std::cin >> x) {
    std::cout << x << "が入力されました。" << std::endl;
  }
}
  • std::cin[link /reference/iostream/cin.md]

入力

1

出力

1が入力されました。

実装例

TBD

バージョン

言語

  • C++98
  • C++11: long longunsigned long long を実引数として受け取るものが追加された

関連項目

参照