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

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

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

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

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

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

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

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

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

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

IMHO & AFAIK

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

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

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

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

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

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

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

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

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

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

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

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

Если ты хочешь объявить CONST поток, из которого ты читаешь, то ты хочешь чего-то очень странного.
...
Рейтинг: 0 / 0
В чем сакральная мудрость не const параметра std::getline()?
    #39623312
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
18 сообщений из 18, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / В чем сакральная мудрость не const параметра std::getline()?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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