Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / В чем сакральная мудрость не const параметра std::getline()? / 18 сообщений из 18, страница 1 из 1
29.03.2018, 18:59
    #39622869
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем сакральная мудрость не const параметра std::getline()?
Новичку, которым я являюсь, кажется, что первый параметр следовало бы сделать const. Почему нет?
Из-за этого я не могу объявить const передаваемый в использующий getline метод поток.
...
Рейтинг: 0 / 0
29.03.2018, 19:31
    #39622877
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем сакральная мудрость не const параметра std::getline()?
Может я чего не понимаю, но как параметр input может быть const ?

Мы же из него данные читаем и прочитанное после себя удаляем (как минимум позиция в потоке меняется).
...
Рейтинг: 0 / 0
29.03.2018, 19:38
    #39622882
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем сакральная мудрость не const параметра std::getline()?
Leonid Kudryavtsev,

А, я думал что конст запрещает только явные изменения, типа stream.position = 1.
Так он запрещает и "самоизменение" потока от вызова скажем stream.read()?
...
Рейтинг: 0 / 0
29.03.2018, 19:41
    #39622884
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем сакральная мудрость не const параметра std::getline()?
AFAIK Не знаток C

const НИЧЕГО НЕ ЗАПРЕЩАЕТ
Он говорит, что данный объект (экземпляр объекта) в данной функции НЕ МЕНЯЕТСЯ

Объект input меняется, т.е. он не константа, а обычная переменная
...
Рейтинг: 0 / 0
29.03.2018, 19:43
    #39622885
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем сакральная мудрость не const параметра std::getline()?
ВикипедияКонстанта — некоторая величина, не изменяющая своё значение в рамках рассматриваемого процесса.

ВикипедияПеременная (программирование) — поименованная, либо адресуемая иным способом область памяти, адрес которой можно использовать для осуществления доступа к данным и изменять значение в ходе выполнения программы.
...
Рейтинг: 0 / 0
29.03.2018, 19:57
    #39622890
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем сакральная мудрость не const параметра std::getline()?
Leonid Kudryavtsev,

в функцию передается ссылка, то есть адрес. этот адрес не меняется. что я упускаю?
...
Рейтинг: 0 / 0
29.03.2018, 20:07
    #39622895
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем сакральная мудрость не const параметра std::getline()?
Gobzo KoblerLeonid Kudryavtsev,

в функцию передается ссылка, то есть адрес. этот адрес не меняется. что я упускаю?

Вы были бы правы, если бы в ф-цию передавался указатель.

Указатель == объект "адрес"
Ссылка == просто передача объекта by reference. А объект меняется

IMHO & AFAIK

p.s. повторюсь, не специалист по C / C++. Точные отсылки к specification это к другим.
...
Рейтинг: 0 / 0
29.03.2018, 20:47
    #39622912
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем сакральная мудрость не const параметра std::getline()?
Есть разница между
const char * х и
char * const х

а вообще const - зло, совсем идеологически с С несовместимое
...
Рейтинг: 0 / 0
29.03.2018, 20:54
    #39622917
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем сакральная мудрость не const параметра std::getline()?
Siemarglа вообще const - зло, совсем идеологически с С несовместимоеconst - чистый прагматизм.
...
Рейтинг: 0 / 0
29.03.2018, 23:27
    #39622949
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем сакральная мудрость не const параметра std::getline()?
Leonid KudryavtsevМожет я чего не понимаю, но как параметр input может быть const ?

Мы же из него данные читаем и прочитанное после себя удаляем (как минимум позиция в потоке меняется).Не так!
По идеологии Си, отсутствие const подразумевает, что функция может менять содержимое буфера, адрес которого задан указателем.
...
Рейтинг: 0 / 0
29.03.2018, 23:31
    #39622951
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем сакральная мудрость не const параметра std::getline()?
SiemarglЕсть разница между
const char * х и
char * const х

а вообще const - зло, совсем идеологически с С несовместимоеКонечно!
В первом случае это запрещенный к изменению (с точки зрения компилятора) указатель на буфер, а во втором - изменяемый указатель на буфер с запрещенным к изменению содержимым.
...
Рейтинг: 0 / 0
29.03.2018, 23:40
    #39622954
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем сакральная мудрость не const параметра std::getline()?
rdb_dev,

Ну это типа защита от логических ошибок? То есть если при создании метода подразумевается, что параметр в нем менять нельзя, объявляешь его конст и компилятор ругнется если кто-то об этом забудет? Почему тогда зло? В жабе это очень рекомендованный подход.
...
Рейтинг: 0 / 0
30.03.2018, 00:08
    #39622956
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем сакральная мудрость не const параметра std::getline()?
Gobzo KoblerНу это типа защита от логических ошибок?

Не только. Ещё и оптимизатор может использовать это указание как хинт и избегать создания
временных переменных.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
30.03.2018, 00:32
    #39622962
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем сакральная мудрость не const параметра std::getline()?
Gobzo KoblerПочему тогда зло?потому что Siemargl у нас экстремист))
...
Рейтинг: 0 / 0
30.03.2018, 01:18
    #39622965
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем сакральная мудрость не const параметра std::getline()?
egorych,

так все-таки насчет getline() хотелось бы понять. если внутри она читает из переданного потока, почему этот параметр не может быть константой?
...
Рейтинг: 0 / 0
30.03.2018, 05:24
    #39622982
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем сакральная мудрость не const параметра std::getline()?
Gobzo Koblerпочему этот параметр не может быть константой?ну, как минимум, ему внутри зовётся setstate, а это, подозреваю, несовместимо с const

я const использую везде, где нужно, из соображений оптимизации и дополнительного исключения ошибок
если при компиляции возникают ошибки, связанные с const, для меня это хороший повод пересмотреть логику
...
Рейтинг: 0 / 0
30.03.2018, 12:03
    #39623175
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем сакральная мудрость не const параметра std::getline()?
Gobzo Kobleregorych,

так все-таки насчет getline() хотелось бы понять. если внутри она читает из переданного потока, почему этот параметр не может быть константой?

Потому что поток, из которого ты читаешь, меняется при чтении.
Функции, которыми ты внутри std::getline читаешь из потока, не CONST,
и если бы первый параметр (ссылка на поток) был бы CONST, эти функции чтения из
потока нельзя было бы вызвать, т.е. нельзя было бы читать.

Чтение из потока и запись в поток изменяют этот поток, поэтому эти функции не являются const.

авторИз-за этого я не могу объявить const передаваемый в использующий getline метод поток.

Если ты хочешь объявить CONST поток, из которого ты читаешь, то ты хочешь чего-то очень странного.
...
Рейтинг: 0 / 0
30.03.2018, 14:31
    #39623312
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем сакральная мудрость не const параметра std::getline()?
rdb_devSiemarglЕсть разница между
const char * х и
char * const х

а вообще const - зло, совсем идеологически с С несовместимоеКонечно!
В первом случае это запрещенный к изменению (с точки зрения компилятора) указатель на буфер, а во втором - изменяемый указатель на буфер с запрещенным к изменению содержимым.
отличная иллюстрация непонимания конст. просто наоборот.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
int main()
{
const char * x;
char * const y;
char buf[10];
 
x = buf;
y = buf; //const.c:8:3: error: assignment of read-only variable 'y'
*x = 5;  //const.c:9:4: error: assignment of read-only location '*x' 
*y = 7;
}


заодно наверное и ответ ТСу
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / В чем сакральная мудрость не const параметра std::getline()? / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]