Lorsque vous écrit cin >> a
, vous utilisez réellement le std::istream::operator>>
, selon la référence here, cet opérateur retourne une référence d'objet istream&
, et a pris la variable de droite (de référence) comme argument. Voici comment vous pouvez l'enchaîner comme: cin >> a >> b
.
Pour voir cette chaîne cin >> a >> b
une autre façon, quand tomber en panne, il est ces deux étapes:
- Première étape,
cin >> a
retourne une valeur intermédiaire, disons que c'est x
. (Vous pouvez réellement essayer auto x = cin >> a
.
- Deuxième étape, vous faites
(cin >> a) >> b
, lorsque nous utilisons cette valeur intermédiaire x
, on pourrait écrire comme x >> b
.
Alors qu'est-ce que l'enfer est-ce x
? x
reste ici une même position que le cin
, il est un objet de type istream&
.
par conséquent, lorsque vous parlez de true
ou false
, vous parlez en fait de savoir si ce retour istream&
référence, reportez-vous à un objet, que ce soit true
ou false
. Ce serait false
quand la sortie standard attraperait un signe EOF (comme quand vous tapez Ctrl-C dans un système comme unix, ou quand vous avez lu à la fin d'un fichier).
Votre code, par conséquent, pourrait être étendu en
#include <iostream>
using namespace std;
int main()
{
int a, b;
auto x = cin >> a >> b
while (x)
{
cout << a << b << "\n";
}
}
Si vous utilisez un IDE comme Visual Studio, vous pouvez pointer votre souris à la x
variable, il vous demande alors le type de x
et ce serait un istream&
.
En outre, grâce à Bob__, cette classe istream&
pourrait être convertir à une classe ios::operator bool
, comme il est écrit here, que ce soit true
ou false
représente l'état (ios_base::iostate
) de cette stream
, il therfore,
permet d'utiliser des flux et des fonctions qui renvoient des références à des flux en tant que conditions de boucle, ce qui entraîne les boucles d'entrée C++ idiomatiques telles que while(stream >> value) {...}
ou while(getline(stream, string)){...}
. De telles boucles n'exécutent le corps de la boucle que si l'opération d'entrée a réussi.
Pour faciliter votre compréhension, vous devriez lire le chapitre opérateur (surcharge) de votre manuel.
Vous devriez également mentionner [operator bool] (http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool). –
@Chazeon: La réponse mise à jour est vraiment explicative. Merci. :) – aps120797