Нужна помощь знатоков istream_iterator

Модератор: Модераторы разделов

Аватара пользователя
slasher
Сообщения: 92
ОС: Arch

Нужна помощь знатоков istream_iterator

Сообщение slasher »

Есть код

Код: Выделить всё

#include <iostream>
#include <iterator>
using namespace std;
int main()
{
 istream_iterator<int> aa(cin);
 istream_iterator<int> bb;

 if (aa!=bb) cout << 1;
}

Он не компилится (error: no match for 'operator!=' in 'aa != bb'), хотя

Код: Выделить всё

#include <iostream>
#include <iterator>
using namespace std;
int main()
{
 istream_iterator<int> aa(cin);
 istream_iterator<int> bb();

 if (aa!=bb) cout << 1;
}

весьма компилится.
Вроде ведь, конструктор по умолчанию вызывается и в том, и другом случае?
Не пойму, в чем тут дело. Компилятор -- gcc version 4.3.2 (Debian 4.3.2-1.1)
Today would be a good day to DIE.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5427
ОС: Gentoo

Re: Нужна помощь знатоков istream_iterator

Сообщение /dev/random »

Вы хотите сказать - наоборот. То, что вы сказали "компилируется", не компилируется, а то, что вы сказали "не компилируется", компилируется ))
Всё очень просто. Строка

Код: Выделить всё

istream_iterator<int> bb;
- это определение объекта bb типа istream_iterator<int> с вызовом конструктора по-умолчанию.
А строка

Код: Выделить всё

istream_iterator<int> bb();
- это объявление прототипа функции с именем bb, без параметров, возвращающей значение типа istream_iterator<int>.
Спасибо сказали:
Аватара пользователя
slasher
Сообщения: 92
ОС: Arch

Re: Нужна помощь знатоков istream_iterator

Сообщение slasher »

Да, конечно, перепутал:) Писал уже во втором часу ночи. Большое спасибо, видать ночью лучше не работать:)
Today would be a good day to DIE.
Спасибо сказали: