Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2011, 17:34   #81
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

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

Цитата:
а как же минимальная область видимости переменной?
Никаких проблем, просто при необходимости добавляем фигурные скобки:
{
char c;
for ...
}
still_alive вне форума Ответить с цитированием
Старый 25.12.2011, 17:44   #82
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Никаких проблем, просто при необходимости добавляем фигурные скобки:
практически любой нормальный компилятор итак делает так.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.12.2011, 18:21   #83
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Если мы говорим о высокопроизводительных программах, то безусловно это так.
Мы говорим не о том, как выжать максимум, а о том, как не допустить нерационального падения, сохранив идеологию и чистоту стиля.

Идеология с++ заключается в управлении сложностью проекта.
Красивая архитектура с++ избавляет программиста от необходимости держать в голове "низкоуровневую кухню"

Допустим, фик с ним, с чаром. А если речь об объекте класса?
Вы скажете: ну тяжелый же объект будит вызывать конструкторы, диструкторы, это же с++. Поэтому его надо выносить за тело цикла.

И что получится? Это мы выносим, а это не выносим, да?

Ну то есть, вместо единообразного стиля, получаем многообразный, и с требованием, знать как минимум азы ассемблера?
То есть вы предлагаете необходимость знания ассемблера тупо для того, что бы понимать что делает высокоуровневый прикладной код? Так что ли?
Может тогда проще сразу писать на ассемблере?


Макконелл в своей книге пишет: единообразный стиль - первая превентивная форма защиты от ошибок. И именно поэтому, и были созданы понятия о нотациях code-style

Цитата:
Сообщение от Son Of Pain Посмотреть сообщение
В первую очередь программист на C++ (да и на любом другом языке) должен писать код так, чтобы его было приятно читать. Ты же не будешь спорить с тем, что если переменная объявлена рядом с местом ее использования - это выглядит логичнее, чем pascal-style куча переменных в одном месте?
Хорошо, давайте на реалистичном примере?

Не чар, но тяжелый объект. Его конструкторы/диструкторы сжирают кучу времени.

Понятно, что вы вынесете его за тело цикла, да?

Вопрос: почему у вас объект находится за 1005000 км от места использования?

Последний раз редактировалось _Bers; 25.12.2011 в 18:51.
_Bers вне форума Ответить с цитированием
Старый 25.12.2011, 18:41   #84
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

мой тезис: что бы не допустить нерационального падения - достаточно знать родной язык.

А что бы обеспечить близкое использование создаваемой сущности - нужно грамотно структурировать программу. "Разделяй и властвуй" - разбивать сложную задачу на кучку мелких инлайн функций, которые манипулируют значениями данных. Но ничего не создают, и не удаляют.

В самом цикле только обработка данных. Ничего не создаётся, и не удаляется.

Последний раз редактировалось _Bers; 25.12.2011 в 18:44.
_Bers вне форума Ответить с цитированием
Старый 25.12.2011, 19:09   #85
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Вы скажете: ну тяжелый же объект будит вызывать конструкторы, диструкторы, это же с++. Поэтому его надо выносить за тело цикла.
если нужен каждую итерацию новый обьект, то толку от выноса не прибавится.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.12.2011, 19:14   #86
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
если нужен каждую итерацию новый обьект, то толку от выноса не прибавится.
см задачу. Нужен ли?
_Bers вне форума Ответить с цитированием
Старый 25.12.2011, 19:18   #87
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

О боже.

Цитата:
Сообщение от _Bers Посмотреть сообщение
И что получится? Это мы выносим, а это не выносим, да?
Да, именно так. Человек думающий отличается от догматика тем, что видит границы применимости существующих правил (догм).
Саттер в своей книге писал именно о таком случае, например.

Для понимания того, как и когда происходит создание и уничтожение объектов в C++, совсем не обязательно знать ассемблер, потому не нужно пытаться построить на этом красивый силлогизм.
И если это понимание есть - становится очевидным, в каких случаях стоит пренебречь читаемостью кода и унести переменную далеко, а в каких этого делать не стоит. Опять же - это будет понятно даже без знания ассемблера, которого ты так боишься.

Программисту всегда приходится балансировать между читаемостью&поддерживаемостью кода, скоростью его работы и разными другими факторами. И никакие механически вызубренные правила "единого стиля" тут не помогут.
Son Of Pain вне форума Ответить с цитированием
Старый 25.12.2011, 19:19   #88
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я же сказал, если.
иначе естественно надо, поскольку конструктор обьекта может обладать побочными эффектами, то если он в цикле, то каждый раз обязан быть вызван.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.12.2011, 19:25   #89
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Son Of Pain Посмотреть сообщение
О боже.
Да, именно так.
говнокод вас очень любит.


1. Нарушение инкапсуляции механизма.
2. Нарушение инварианта механизма.

Грешно знать и не применять. Но злоупотреблять - ещё более грешно
_Bers вне форума Ответить с цитированием
Старый 25.12.2011, 19:32   #90
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Грешно знать и не применять. Но злоупотреблять - ещё более грешно
я считаю еще более грешным вынос того что нафиг вне цикла не нужно, из этого цикла и выносить.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PopupMenu со мной не дружит Жигилий_Ульяна Компоненты Delphi 5 25.12.2008 11:04
проблемы с select или со мной... smoke888 JavaScript, Ajax 2 23.09.2008 19:02