cin inside a while loop

前端 未结 1 1033
旧巷少年郎
旧巷少年郎 2020-12-22 07:56

I have written a simple code:

#include 
using namespace std;
int main()
{
  int a, b;
  while (cin >> a >> b)     //Note the cin          


        
相关标签:
1条回答
  • 2020-12-22 08:27

    When you writes cin >> a, you are actually using the std::istream::operator>>, according to the reference here, this operator returns an istream& object reference, and took the right hand variable (reference) as its argument. This is how you can chain it like: cin >> a >> b.

    To see this cin >> a >> b chain another way, when break down, it is this two steps:

    • First step, cin >> a returns some intermediate value, let's say it is x. (You can actually try auto x = cin >> a.
    • Second step, you are doing (cin >> a) >> b, when we use this intermediate value x, we could write it as x >> b.

    So what the hell is this x? x here stays a same position as the cin, it is an object of istream& type.

    Therefore, when you talk about true or false, you are actually talking about whether this returned istream& reference, refer to an object, whether it is true or false. It would be false when the standard output catch an EOF sign (like when you type Ctrl-C in unix like system, or when you have read to the end of a file).

    Your code, therefore, could be expanded as

    #include <iostream>
    using namespace std;
    int main()
    {
      int a, b;
      auto x = cin >> a >> b
      while (x)
      { 
        cout << a << b << "\n";
      }
    }
    

    If you are using an IDE like Visual Studio, you could point your mouse at the variable x, it would prompt you x's type, and that would be an istream&.

    Also, thanks to Bob__, this istream& class could be convert to an ios::operator bool class, as is written here, whether it is true or false represents the state(ios_base::iostate) of this stream, it therfore,

    makes it possible to use streams and functions that return references to streams as loop conditions, resulting in the idiomatic C++ input loops such as while(stream >> value) {...} or while(getline(stream, string)){...}. Such loops execute the loop's body only if the input operation succeeded.

    To further your understanding, you should read the operator (overloading) chapter in your textbook.

    0 讨论(0)
提交回复
热议问题