Форум программистов, компьютерный форум CyberForum.ru

есть указатель на конец файла и он самоинициализируется, но не в месте объявления, а когда учавствует в условии. Почему так? - C++

Восстановить пароль Регистрация
 
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
26.06.2011, 18:31     есть указатель на конец файла и он самоинициализируется, но не в месте объявления, а когда учавствует в условии. Почему так? #1
Сабж, мистика какая-то.
Вот я так работаю
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <fstream>
#include <iterator>
using namespace std;
 
int main(){ 
   ifstream file__("temp.txt", ios::binary|ios::in);
   ifstream file("ra.cpp", ios::binary|ios::in);
   ifstream file_("ra.exe", ios::binary|ios::in);
   string str;
 
   istream_iterator<unsigned char>  eof;
 
   istream_iterator<unsigned char> i(file);
   while (i!= eof) {
    str+=*i++;
   }
 
   cout<< str;
   getchar ();
   return 0;
}
Ну то есть считываю в строку файл, пока не кончится. М вот в зависимости от того, какой файл я считываю (file, file_ или file__ ) вот такой и считывается, то есть условие i!= eof вполне себе работает, получается, eof само собой присваивается конец нужного файла. Вот это да! А объявляется она Бог знает где (и не может там инициализироваться), ещё до того, как я указываю, с каким файлом работать, то есть до строки
C++
1
istream_iterator<unsigned char> i(file);
Это что, так должно быть? Я первый раз столкнулся с тем, что переменная инициализируется в условии!

Добавлено через 1 минуту
И да, eof вообще можно в самом начале объявить всё равно она будет указывать на конец нужного файла!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2011, 18:31     есть указатель на конец файла и он самоинициализируется, но не в месте объявления, а когда учавствует в условии. Почему так?
Посмотрите здесь:

C++ Указатель this - как и когда его использовать
C++ вопрос к спецам: почему функция fputc при работе не устанавливает счётчик файла в конец?
Можно ли установить указатель на конец файла, не подсчитывая его размер? C++
C++ Работаю с файлом *.txt. Прога ведет себя странно если последняя строка файла пуста. Почему так?
C++ Указатель в условии
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,960
26.06.2011, 18:39     есть указатель на конец файла и он самоинициализируется, но не в месте объявления, а когда учавствует в условии. Почему так? #2
Цитата Сообщение от kravam Посмотреть сообщение
Это что, так должно быть? Я первый раз столкнулся с тем, что переменная инициализируется в условии!
Никакой инициализации в условии на самом деле нет. Просто итераторы потокового ввода считаются равными, если оба указывают на конец файла. При создании eof поток не указан, поэтому он изначально "указывает на конец потока"
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
26.06.2011, 18:48  [ТС]     есть указатель на конец файла и он самоинициализируется, но не в месте объявления, а когда учавствует в условии. Почему так? #3
Какого потока? Всяко до объявления eof должен быть объявлен поток, и eof будет на него указывать.

А у меня объявляются ТРИ потока!
И из них компилятор безошибочно находит тот, который будет использоваться в дальнейшем и присваивает его конец eofу, это и удивляет.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
26.06.2011, 18:51     есть указатель на конец файла и он самоинициализируется, но не в месте объявления, а когда учавствует в условии. Почему так? #4
а зачем вообще плодить лишнюю сущность, а не юзать file.eof()
grizlik78
Эксперт С++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,960
26.06.2011, 18:57     есть указатель на конец файла и он самоинициализируется, но не в месте объявления, а когда учавствует в условии. Почему так? #5
Любого потока. Если сравнивать два итератора для двух совершенно разных потоков, то они станут равны как только оба итератора достигнут конца каждый своего потока. А для eof вызывается конструктор по умолчанию, который сразу инициализирует его концом виртуального пустого потока.

Добавлено через 5 минут
Цитата Сообщение от Maxwe11 Посмотреть сообщение
а зачем вообще плодить лишнюю сущность, а не юзать file.eof()
В данном конкретном случае, наверное, незачем. Но потоковые итераторы, как и любые другие, могут участвовать в алгоритмах или интервальных вариантах функций. Тогда указатель на конец потока необходим.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
26.06.2011, 19:12  [ТС]     есть указатель на конец файла и он самоинициализируется, но не в месте объявления, а когда учавствует в условии. Почему так? #6
Цитата Сообщение от grizlik78 Посмотреть сообщение
Любого потока. Если сравнивать два итератора для двух совершенно разных потоков, то они станут равны как только оба итератора достигнут конца каждый своего потока.
а ну то есть это типа если бы мы использовали EOF (одинаковую для всех), только EOF переменная типа int, а eof- указатель?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2011, 19:14     есть указатель на конец файла и он самоинициализируется, но не в месте объявления, а когда учавствует в условии. Почему так?
Еще ссылки по теме:

Цикл заканчивается не так, как задано в условии C++
Почему указатель на указатель объявляется как float **A; C++
C++ Конец файла. Есть ли разница в windows и linux?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт С++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,960
26.06.2011, 19:14     есть указатель на конец файла и он самоинициализируется, но не в месте объявления, а когда учавствует в условии. Почему так? #7
Цитата Сообщение от kravam Посмотреть сообщение
а ну то есть это типа если бы мы использовали EOF (одинаковую для всех), только EOF переменная типа int, а eof- указатель?
Да, только не указатель, а итератор
Yandex
Объявления
26.06.2011, 19:14     есть указатель на конец файла и он самоинициализируется, но не в месте объявления, а когда учавствует в условии. Почему так?
Ответ Создать тему
Опции темы

Текущее время: 02:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru