![]() |
|
Модераторы: Daevaorn |
![]()
|
|
||
|
|
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
Cтpaнник, вопрос был именно про нессылки
с ссылками давно все ясно а с точки зрения дизайна пофик, будет ли разработчик внутри своей функции нессылки менять, все равно на конечном результате функции это не скажется |
|||
|
||||
| Cтpaнник |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 12.10.2008 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: нет |
С вопросом я все понял.
А вот с точки зрения дизайна, даже для просто int переменных - я считаю, что если разработчик не должен менять переданный в функцию аргумент, то он не должен суметь этого сделать никогда. Это - одна из гарантий, которая ему предоставляется интерфейсом. И const в данном случае - ему в помощь. Можно отнести наше расхождение во мнениях к разряду религиозных верований PS. То, что изменение не повлияет на конечный результат..... хмм..... я видывал и обратное. Продукты всякие бывают, в том числе - с совершенно некошерным legacy кодом, которого - брррр! - сотни килострок (KSLOC). |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
во-первых, внутря функции - это никаким макаром не интерфейс во-вторых, в том случае, если разраб страдает потерей кратковеменной памяти в тяжелой форме, то в этом случае у него есть гораздо более серьезные проблемы, чем какие-то параметры Это сообщение отредактировал(а) J0ker - 23.4.2009, 16:40 |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Не верно. Передаём какой-нибудь implicit sharing объект. Не по ссылке. Без конста. Вызываем метод без конст-модификатора. Портятся данные как для копии объекта в функции, так и для самого переданного объекта. Сигнатура функции - это интерфейс. В любом случае. А так давай - и от прайватов и прочих откажемся.. Девелоперы умные - пускай сами помнят Моё мнение (для обоих случаев): 1. Использую часто. Единственное - подобные вещи выношу на начало функции. 2. Если физически (см. начало моего сообщения) вариант без конста отличается от вариант с констом, то тоже использую (если логически мне нужна конст-версия). |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
естественно верно, т.к. речь исключительно о базовых типах я и говорю - внутря функции - это нихрена не интерфейс нет внутря функции - это нихрена не интерфейс
вы путаете отношения между девелопером и пользователем с отношениями между девелопером и его-же функциональными нарушениями мозговой деятельности |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Где в той цитате, на которую я отвечал было об этом сказано? ;) Реьч только о "нессылках". Так.. ещё раз. Смотрим внимательно историю: "переданный в функцию аргумент" - т. е. параметр функции, т. е. речь о сигнатуре функции.
Бррр... Что есть пользователь, что есть девелопер? Тот, кто функцию вызывает - девелопер или пользователь? |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
речь шла о POD типах, если мы передаем в ф-ю какой-нибудь shared_ptr, и объект на который он указывает нельзя менять в этой ф-ии, то естественно нужен const... |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Ммм... Может я слепой, но где было сказано, что речь о POD-типах?!
|
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
а можно это на пальцах, для тупых? я передаю аргумент по значению, значит перед вызовом функции он скопируется в стек... что дальше? и что такое "implicit sharing объект"? Добавлено через 4 минуты и 19 секунд а, дошло Добавлено через 6 минут и 23 секунды как афтар опроса, скажу - вопрос не ограничивался ПОД типами правда я не учел implicit sharing объектов, потому написал int |
|||
|
||||
| J0ker |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
ну как-бы здравый смысл
изнутри функции - это не сигнатура - это типы переменных
тот кто вызывает - пользователь Добавлено через 6 минут и 44 секунды т.е. здравый смысл автору чужд так и запишем |
||||||
|
|||||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Да, кстати с explicit sharing-ом такое тоже прокатит Хорошо. А снаружи? Любопытно.. Впрочем ладно - с модификаторами доступа несколько иная ситуация, неудачный я пример привёл. А вот скажем конст - как модификатор метода класса (для классов, меняющих только mutable поля) вы используете? Это сообщение отредактировал(а) Любитель - 23.4.2009, 22:50 |
|||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Нормальные классы (в том числе использующие идиому COW) не позволяют обходить логическое постоянство простым копированием объекта (ибо какой тогда толк с поддержки константности, которую так легко нарушить?). Вот только константность параметра частью сигнатуры не является.
|
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
||||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
не-POD типы никто по значению и не передает, если явно не требуется. А потребоваться это может только в одном случае - обьект надо изменять внутри ф-ии, а значит и cons Type не катит. Так, что не рассамытриваем этот вариант Интерфейс к чему? Сигнатура это сигнатура, интерфейс может быть у класса, у ф-ии нет интерфейса. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |