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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> throw как выход из рекурсии??? 
V
    Опции темы
Irdis
  Дата 4.4.2010, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



При поиске элемента в дереве, советуют сделать следующее.
Кидать эксепшн, если нашли элемент; и отлавливать его. Мотивировалось это тем, что это эффективный выход из рекурсии.
Это нормально? 

ИМХО. 
Эксепшн - это эксепшн, которые следует использовать с той целью с которой их создавали. 
Написал мощный return, если нашли элемент. 
PM MAIL   Вверх
GoldFinch
Дата 4.4.2010, 21:53 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



в С++ считается, что эксепшн надо создавать при исключительной ситуации. 
нахождение элемента - это не исключительная ситуация.

однако в других языках сепшены бросают везде где это удобно. 
если удобно бросать сепшен для выхода из рекурсии - почему бы и нет
PM MAIL ICQ   Вверх
jonie
Дата 4.4.2010, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



а вот гугловские ребята вообще запрещают использовать эксепшены..... а насчет "эффективности" - можно и поспорить..

Это сообщение отредактировал(а) jonie - 4.4.2010, 22:44


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
GoldFinch
Дата 4.4.2010, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



каждый извращается как может %)
можно и классы в С++ запретить

Добавлено через 1 минуту и 21 секунду
"эффективный" - это конечно не в плане быстродействия, а в плане удобства написания кода
PM MAIL ICQ   Вверх
boostcoder
Дата 5.4.2010, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(jonie @  4.4.2010,  22:44 Найти цитируемый пост)
а вот гугловские ребята вообще запрещают использовать эксепшены

как аргументируют?
PM WWW   Вверх
jonie
Дата 5.4.2010, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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





--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
boostcoder
Дата 5.4.2010, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



исчерпывающе. вопросов не осталось, ни одного smile
PM WWW   Вверх
azesmcar
Дата 5.4.2010, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(jonie @  5.4.2010,  08:32 Найти цитируемый пост)
boostcoder, просто: http://google-styleguide.googlecode.com/sv....xml#Exceptions

там внизу кнопочка есть
Цитата

    *  Exceptions allow higher levels of an application to decide how to handle "can't happen" failures in deeply nested functions, without the obscuring and error-prone bookkeeping of error codes.

    * Exceptions are used by most other modern languages. Using them in C++ would make it more consistent with Python, Java, and the C++ that others are familiar with.

    * Some third-party C++ libraries use exceptions, and turning them off internally makes it harder to integrate with those libraries.
    * Exceptions are the only way for a constructor to fail. We can simulate this with a factory function or an Init() method, but these require heap allocation or a new "invalid" state, respectively.

    * Exceptions are really handy in testing frameworks.

Cons:
    * When you add a throw statement to an existing function, you must examine all of its transitive callers. Either they must make at least the basic exception safety guarantee, or they must never catch the exception and be happy with the program terminating as a result. For instance, if f() calls g() calls h(), and h throws an exception that f catches, g has to be careful or it may not clean up properly.

    * More generally, exceptions make the control flow of programs difficult to evaluate by looking at code: functions may return in places you don't expect. This results maintainability and debugging difficulties. You can minimize this cost via some rules on how and where exceptions can be used, but at the cost of more that a developer needs to know and understand.

    * Exception safety requires both RAII and different coding practices. Lots of supporting machinery is needed to make writing correct exception-safe code easy. Further, to avoid requiring readers to understand the entire call graph, exception-safe code must isolate logic that writes to persistent state into a "commit" phase. This will have both benefits and costs (perhaps where you're forced to obfuscate code to isolate the commit). Allowing exceptions would force us to always pay those costs even when they're not worth it.

    * Turning on exceptions adds data to each binary produced, increasing compile time (probably slightly) and possibly increasing address space pressure.

    * The availability of exceptions may encourage developers to throw them when they are not appropriate or recover from them when it's not safe to do so. For example, invalid user input should not cause exceptions to be thrown. We would need to make the style guide even longer to document these restrictions!

Decision:

On their face, the benefits of using exceptions outweigh the costs, especially in new projects. However, for existing code, the introduction of exceptions has implications on all dependent code. If exceptions can be propagated beyond a new project, it also becomes problematic to integrate the new project into existing exception-free code. Because most existing C++ code at Google is not prepared to deal with exceptions, it is comparatively difficult to adopt new code that generates exceptions.

Given that Google's existing code is not exception-tolerant, the costs of using exceptions are somewhat greater than the costs in in a new project. The conversion process would be slow and error-prone. We don't believe that the available alternatives to exceptions, such as error codes and assertions, introduce a significant burden.

Our advice against using exceptions is not predicated on philosophical or moral grounds, but practical ones. Because we'd like to use our open-source projects at Google and it's difficult to do so if those projects use exceptions, we need to advise against exceptions in Google open-source projects as well. Things would probably be different if we had to do it all over again from scratch.

There is an exception to this rule (no pun intended) for Windows code.

PM   Вверх
boostcoder
Дата 5.4.2010, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



azesmcar, недодумался smile 

PM WWW   Вверх
azesmcar
Дата 5.4.2010, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(boostcoder @  5.4.2010,  10:20 Найти цитируемый пост)
azesmcar, недодумался smile 

Я тоже сперва не додумался, потом прочел наверху smile 

не нашел ни одного серьезного аргумента, особенно мне понравился этот

Цитата(azesmcar @  5.4.2010,  10:02 Найти цитируемый пост)

    * The availability of exceptions may encourage developers to throw them when they are not appropriate or recover from them when it's not safe to do so.


Цитата(azesmcar @  5.4.2010,  10:02 Найти цитируемый пост)
We would need to make the style guide even longer to document these restrictions!

даааа, это конечно серьезная причина smile 

ребята видимо не понимают для чего нужен документ, описывающий стиль. Они хотят уместить в нем все советы Майерса и Саттера.

Это сообщение отредактировал(а) azesmcar - 5.4.2010, 10:36
PM   Вверх
boostcoder
Дата 5.4.2010, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



и вправду, странная аргументация.
а вообще, что-то многовато этих стайл-гайдов поразводилось. у каждой конторы по одному минимум.
PM WWW   Вверх
Alek86
Дата 11.4.2010, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



оффтоп
azesmcar, ага, тупые америкосы smile

Это сообщение отредактировал(а) Alek86 - 11.4.2010, 20:06


--------------------
user posted image    user posted image
PM MAIL   Вверх
azesmcar
Дата 11.4.2010, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(Alek86 @  11.4.2010,  20:06 Найти цитируемый пост)
оффтоп
azesmcar, ага, тупые америкосы smile

я их не считаю тупыми smile 
PM   Вверх
boostcoder
Дата 11.4.2010, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(Alek86 @  11.4.2010,  20:06 Найти цитируемый пост)
ага, тупые америкосы

как понимать?
PM WWW   Вверх
Alek86
Дата 11.4.2010, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(boostcoder @  11.4.2010,  20:56 Найти цитируемый пост)
как понимать?

это ответ на
Цитата(azesmcar @  5.4.2010,  10:31 Найти цитируемый пост)
ребята видимо не понимают для чего нужен документ, описывающий стиль


ЗЫ.  ироничный


--------------------
user posted image    user posted image
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0721 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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