Когда пишет cin >> a
, вы на самом деле с помощью std::istream::operator>>
, по ссылке here, этот оператор возвращает ссылку на объект istream&
и взял переменную правой руки (ссылка) в качестве аргумента. Вот как вы можете связать его так: cin >> a >> b
.
Чтобы увидеть это cin >> a >> b
цепь другой путь, когда ломаются, то это два шага:
- Первый шаг,
cin >> a
возвращает некоторое промежуточное значение, скажем, это x
. (Вы действительно можете попробовать auto x = cin >> a
.
- Второй шаг, вы делаете
(cin >> a) >> b
, когда мы используем это промежуточное значение x
, мы могли бы написать это как x >> b
.
Так что, черт возьми, это x
? x
здесь остается такая же позиция как cin
, он является объектом istream&
типа.
Поэтому, когда вы говорите о true
или false
, вы на самом деле говорить об этом вернулось ли istream&
ссылки, обратитесь к объект, будь то true
или false
. Это будет false
, когда стандартный вывод поймает знак EOF (например, когда вы набираете Ctrl-C в unix-подобной системе или когда вы читаете до конца файла).
Ваш код, таким образом, может быть расширен
#include <iostream>
using namespace std;
int main()
{
int a, b;
auto x = cin >> a >> b
while (x)
{
cout << a << b << "\n";
}
}
Если вы используете IDE, как Visual Studio, вы можете наведите курсор мыши на переменную x
, она предложит вам тип x
«s, и это будет istream&
.
Кроме того, благодаря Bob__, этот istream&
класс может быть преобразовать в ios::operator bool
класс, как написано here, будь то true
или false
представляет состояние (ios_base::iostate
) этого stream
, он Therfore,
позволяет использовать потоки и функции, которые возвращают ссылки на потоки как условия цикла, приводящие к идиоматическим входным контурам C++, таким как while(stream >> value) {...}
или while(getline(stream, string)){...}
. Такие циклы выполняют тело цикла только в том случае, если операция ввода выполнена успешно.
Для дальнейшего понимания, вы должны прочитать главу оператора (перегрузка) в учебнике.
Возможно, вам стоит упомянуть [operator bool] (http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool). –
@Chazeon: Обновленный ответ действительно объяснительный. Благодарю. :) – aps120797