Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 2 использования const 
:(
    Опции темы
 
используете ли вы конструкциb из первого поста?
да, обе [ 10 ]  [24.39%]
да, обе, но нередко забываю [ 4 ]  [9.76%]
только 1 [ 4 ]  [9.76%]
только 1, но нередко забываю [ 2 ]  [4.88%]
только 2 [ 3 ]  [7.32%]
только 2, но нередко забываю [ 1 ]  [2.44%]
нет, но думаю, что надо бы [ 1 ]  [2.44%]
нет, и не собираюсь [ 14 ]  [34.15%]
имхо, это извращения [ 2 ]  [4.88%]
Всего проголосовавших: 41
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
Alek86
Дата 23.4.2009, 12:39 (ссылка) |  (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Cтpaнник, вопрос был именно про нессылки
с ссылками давно все ясно smile

а с точки зрения дизайна пофик, будет ли разработчик внутри своей функции нессылки менять, все равно на конечном результате функции это не скажется


--------------------
user posted image    user posted image
PM MAIL   Вверх
Cтpaнник
Дата 23.4.2009, 12:52 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 12.10.2008
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: нет



С вопросом я все понял.
А вот с точки зрения дизайна, даже для просто int переменных - я считаю, что если разработчик не должен менять переданный в функцию аргумент, то он не должен суметь этого сделать никогда. Это - одна из гарантий, которая ему предоставляется интерфейсом. И const в данном случае - ему в помощь.
Можно отнести наше расхождение во мнениях к разряду религиозных верований smile

PS.  То, что изменение не повлияет на конечный результат..... хмм..... я видывал и обратное. Продукты всякие бывают, в том числе - с совершенно некошерным legacy кодом, которого - брррр! - сотни килострок (KSLOC).
PM MAIL   Вверх
J0ker
Дата 23.4.2009, 16:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(Cтpaнник @  23.4.2009,  12:52 Найти цитируемый пост)
Это - одна из гарантий, которая ему предоставляется интерфейсом. И const в данном случае - ему в помощь.

во-первых, внутря функции - это никаким макаром не интерфейс
во-вторых, в том случае, если разраб страдает потерей кратковеменной памяти в тяжелой форме, то в этом случае у него есть гораздо более серьезные проблемы, чем какие-то параметры  smile 


Это сообщение отредактировал(а) J0ker - 23.4.2009, 16:40


--------------------
user posted image
PM MAIL   Вверх
Любитель
Дата 23.4.2009, 17:23 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Цитата(Alek86 @  23.4.2009,  12:39 Найти цитируемый пост)
а с точки зрения дизайна пофик, будет ли разработчик внутри своей функции нессылки менять, все равно на конечном результате функции это не скажется

Не верно. Передаём какой-нибудь implicit sharing объект. Не по ссылке. Без конста. Вызываем метод без конст-модификатора. Портятся данные как для копии объекта в функции, так и для самого переданного объекта.

Цитата(J0ker @  23.4.2009,  16:27 Найти цитируемый пост)
во-первых, внутря функции - это никаким макаром не интерфейс
во-вторых, в том случае, если разраб страдает потерей кратковеменной памяти в тяжелой форме, то в этом случае у него есть гораздо более серьезные проблемы, чем какие-то параметры

Сигнатура функции - это интерфейс. В любом случае. А так давай - и от прайватов и прочих откажемся.. Девелоперы умные - пускай сами помнят smile

Моё мнение (для обоих случаев):
1. Использую часто. Единственное - подобные вещи выношу на начало функции.
2. Если физически (см. начало моего сообщения) вариант без конста отличается от вариант с констом, то тоже использую (если логически мне нужна конст-версия).


--------------------
PM MAIL ICQ Skype   Вверх
J0ker
Дата 23.4.2009, 19:19 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(Любитель @  23.4.2009,  17:23 Найти цитируемый пост)
Не верно. 

естественно верно, т.к. речь исключительно о базовых типах

Цитата(Любитель @  23.4.2009,  17:23 Найти цитируемый пост)
Сигнатура функции - это интерфейс.

я и говорю - внутря функции - это нихрена не интерфейс

Цитата(Любитель @  23.4.2009,  17:23 Найти цитируемый пост)
В любом случае.

нет
внутря функции - это нихрена не интерфейс

Цитата(Любитель @  23.4.2009,  17:23 Найти цитируемый пост)
А так давай - и от прайватов и прочих откажемся.. Девелоперы умные - пускай сами помнят 

вы путаете отношения между девелопером и пользователем с отношениями между девелопером и его-же функциональными нарушениями мозговой деятельности



--------------------
user posted image
PM MAIL   Вверх
Любитель
Дата 23.4.2009, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Цитата(J0ker @  23.4.2009,  19:19 Найти цитируемый пост)
естественно верно, т.к. речь исключительно о базовых типах

Где в той цитате, на которую я отвечал было об этом сказано? ;) Реьч только о "нессылках".

Цитата(J0ker @  23.4.2009,  19:19 Найти цитируемый пост)
я и говорю - внутря функции - это нихрена не интерфейс

Так.. ещё раз. Смотрим внимательно историю:

Цитата(Cтpaнник @  23.4.2009,  12:52 Найти цитируемый пост)
А вот с точки зрения дизайна, даже для просто int переменных - я считаю, что если разработчик не должен менять переданный в функцию аргумент, то он не должен суметь этого сделать никогда. Это - одна из гарантий, которая ему предоставляется интерфейсом

Цитата(J0ker @  23.4.2009,  16:27 Найти цитируемый пост)
во-первых, внутря функции - это никаким макаром не интерфейс

"переданный в функцию аргумент" - т. е. параметр функции, т. е. речь о сигнатуре функции.

Цитата(J0ker @  23.4.2009,  19:19 Найти цитируемый пост)
вы путаете отношения между девелопером и пользователем с отношениями между девелопером и его-же функциональными нарушениями мозговой деятельности

Бррр... Что есть пользователь, что есть девелопер? Тот, кто функцию вызывает - девелопер или пользователь? smile


--------------------
PM MAIL ICQ Skype   Вверх
Lazin
Дата 23.4.2009, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата(Любитель @  23.4.2009,  17:23 Найти цитируемый пост)
Не верно. Передаём какой-нибудь implicit sharing объект. Не по ссылке. Без конста. Вызываем метод без конст-модификатора. Портятся данные как для копии объекта в функции, так и для самого переданного объекта.


речь шла о POD типах, если мы передаем в ф-ю какой-нибудь shared_ptr, и объект на который он указывает нельзя менять в этой ф-ии, то естественно нужен const...
PM MAIL Skype GTalk   Вверх
Любитель
Дата 23.4.2009, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Ммм... Может я слепой, но где было сказано, что речь о POD-типах?!


--------------------
PM MAIL ICQ Skype   Вверх
Alek86
Дата 23.4.2009, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(Любитель @  23.4.2009,  17:23 Найти цитируемый пост)
Не верно. Передаём какой-нибудь implicit sharing объект. Не по ссылке. Без конста. Вызываем метод без конст-модификатора. Портятся данные как для копии объекта в функции, так и для самого переданного объекта.

а можно это на пальцах, для тупых?
я передаю аргумент по значению, значит перед вызовом функции он скопируется в стек... что дальше?
и что такое "implicit sharing объект"?

Добавлено через 4 минуты и 19 секунд
а, дошло smile

Добавлено через 6 минут и 23 секунды
как афтар опроса, скажу - вопрос не ограничивался ПОД типами
правда я не учел implicit sharing объектов, потому написал int


--------------------
user posted image    user posted image
PM MAIL   Вверх
J0ker
Дата 23.4.2009, 21:36 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(Любитель @  23.4.2009,  19:25 Найти цитируемый пост)
Где в той цитате, на которую я отвечал было об этом сказано? ;) Реьч только о "нессылках".

ну как-бы здравый смысл

Цитата(Любитель @  23.4.2009,  19:25 Найти цитируемый пост)
"переданный в функцию аргумент" - т. е. параметр функции, т. е. речь о сигнатуре функции.

изнутри функции - это не сигнатура - это типы переменных

Цитата(Любитель @  23.4.2009,  19:25 Найти цитируемый пост)
Бррр... Что есть пользователь, что есть девелопер? Тот, кто функцию вызывает - девелопер или пользователь?

тот кто вызывает - пользователь

Добавлено через 6 минут и 44 секунды
Цитата(Alek86 @  23.4.2009,  20:59 Найти цитируемый пост)
как афтар опроса, скажу - вопрос не ограничивался ПОД типами


Цитата(J0ker @  23.4.2009,  21:36 Найти цитируемый пост)
ну как-бы здравый смысл


т.е. здравый смысл автору чужд
так и запишем


--------------------
user posted image
PM MAIL   Вверх
Любитель
Дата 23.4.2009, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92




 ! 
Любитель
J0ker, давай будем повежливей!;)


Цитата(Alek86 @  23.4.2009,  20:59 Найти цитируемый пост)
правда я не учел implicit sharing объектов, потому написал int 

Да, кстати с explicit sharing-ом такое тоже прокатит smile

Цитата(J0ker @  23.4.2009,  21:36 Найти цитируемый пост)
изнутри функции - это не сигнатура - это типы переменных

Хорошо. А снаружи? smile

Цитата(J0ker @  23.4.2009,  21:36 Найти цитируемый пост)
тот кто вызывает - пользователь

Любопытно.. Впрочем ладно - с модификаторами доступа несколько иная ситуация, неудачный я пример привёл. А вот скажем конст - как модификатор метода класса (для классов, меняющих только mutable поля) вы используете?

Это сообщение отредактировал(а) Любитель - 23.4.2009, 22:50


--------------------
PM MAIL ICQ Skype   Вверх
UnrealMan
Дата 23.4.2009, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(Любитель @  23.4.2009,  17:23 Найти цитируемый пост)
Не верно. Передаём какой-нибудь implicit sharing объект. Не по ссылке. Без конста. Вызываем метод без конст-модификатора. Портятся данные как для копии объекта в функции, так и для самого переданного объекта.

Нормальные классы (в том числе использующие идиому COW) не позволяют обходить логическое постоянство простым копированием объекта (ибо какой тогда толк с поддержки константности, которую так легко нарушить?).

Цитата(Любитель @  23.4.2009,  17:23 Найти цитируемый пост)
Сигнатура функции - это интерфейс. В любом случае.

Вот только константность параметра частью сигнатуры не является.

Код
#include <iostream>

void f(const int n); // то же самое, что void f(int n)

int main()
{
    f(0);
}

void f(int n)
{
    n = 1;
    std::cout << n << std::endl;
}

PM MAIL   Вверх
J0ker
Дата 24.4.2009, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(Любитель @  23.4.2009,  22:50 Найти цитируемый пост)
А вот скажем конст - как модификатор метода класса (для классов, меняющих только mutable поля) вы используете?

естественно
иначе как работать с константным объектом



--------------------
user posted image
PM MAIL   Вверх
vinter
Дата 24.4.2009, 06:22 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(Любитель @  23.4.2009,  18:23 Найти цитируемый пост)
Не верно. Передаём какой-нибудь implicit sharing объект. Не по ссылке. Без конста. Вызываем метод без конст-модификатора. Портятся данные как для копии объекта в функции, так и для самого переданного объекта.

не-POD типы никто по значению и не передает, если явно не требуется. А потребоваться это может только в одном случае - обьект надо изменять внутри ф-ии, а значит и cons Type не катит. Так, что не рассамытриваем этот вариант smile

Цитата(Любитель @  23.4.2009,  18:23 Найти цитируемый пост)
Сигнатура функции - это интерфейс.

Интерфейс к чему? Сигнатура это сигнатура, интерфейс может быть у класса, у ф-ии нет интерфейса.



--------------------
Мой блог
PM MAIL WWW   Вверх
mes
Дата 24.4.2009, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(vinter @  24.4.2009,  05:22 Найти цитируемый пост)
Интерфейс к чему? Сигнатура это сигнатура, интерфейс может быть у класса, у ф-ии нет интерфейса.

набор сигнатур функций библиотеки/класса доступных для вызова есть интерфейс библиотеки/класса.
сигнатура функции есть интерфейс функции.
 smile 





--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0671 ]   [ Использовано запросов: 24 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.