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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> тип сгенерированого исключения 
V
    Опции темы
rukudias
Дата 18.9.2008, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Привет Всем!
есть код
Код

void main()
{
  try
    {
        throw ;
    }
    catch(int a)
    {
         a=0;
    }
}


Вопрос какого типа буд сгенерировано исключение!
PM MAIL   Вверх
vinter
Дата 18.9.2008, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



рискну предположить, что никакого. Будет крах и не более.


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


Бывалый
*


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

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



таки да!
НО почему компилятор не отлавливает эту ситуйовицу?
PM MAIL   Вверх
vinter
Дата 18.9.2008, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



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


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


Бывалый
*


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

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



 smile  Я стобой согласен однако сей код буд работать
Код

    try
    {
        try
        {
            throw 10;
        }
        catch(int a)
        {
            cout<<"in"<<endl;
            throw;
        }
    }
    catch(int a)
    {
        cout<<"out"<<endl;
    }

PM MAIL   Вверх
vinter
Дата 18.9.2008, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



rukudias, угу, я даже могу угадать что словит внешний catch smile Наверно 10  smile 
Короче тебе лучше почитать про исключения, throw; в catch это повторная генерация исключения.


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


Опытный
**


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

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



не нао бредить господа
есть такое понятие, как стандарт:
15.1
"A throw-expression with no operand rethrows the exception being handled. The exception is reactivated
with the existing temporary; no new temporary exception object is created. The exception is no longer considered to be caught; therefore, the value of uncaught_exception() will again be true."
и далее:
"15.5.1 The terminate() function 
In the following situations exception handling must be abandoned for less subtle error handling techniques:
---------- покатано -------------------
— when a throw-expression with no operand attempts to rethrow an exception and no exception is being
handled (15.1)"



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


Бывалый
*


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

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



можно на русский
PM MAIL   Вверх
vinter
Дата 18.9.2008, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



Цитата(J0ker @  18.9.2008,  18:53 Найти цитируемый пост)
не нао бредить господа

а где что сказано не так?



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


Опытный
**


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

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



если хотите програмить - учите английский
throw без параметров вызывает повторный выброс эксепшена сохраненного во временной переменной без ее пересоздния
если никакого эксцепшена до этого не было, то вызыается функция terminate()
Цитата(vinter @  18.9.2008,  18:27 Найти цитируемый пост)
а где что сказано не так?

здесь
Цитата(vinter @  18.9.2008,  17:18 Найти цитируемый пост)
а зачем такое ловить? это потенциально бесполезное действие.. А компилятору лишний гемморой, все таки программы пишут программисты, а не домохозяйки  

компилятор должен работать по стандарту, а не потому, что "геморрой"



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


Explorer
****


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

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



J0ker, ну и где там написано, что на это должен реагировать компилятор?
terminate() срабатывает, но эжто время выполнения, а не время компиляции.
З.Ы Компилятор никому ниче не должен, поэтому стандарт полностью не соблюдается нигде(насколько я знаю), так , что уповать на стандарт не стоит.


--------------------
Мой блог
PM MAIL WWW   Вверх
rukudias
Дата 18.9.2008, 19:58 (ссылка)  | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Респект и уважуха!
 smile 

ЗЫ кинь сцылку на стандарты
PM MAIL   Вверх
J0ker
Дата 18.9.2008, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(vinter @ 18.9.2008,  19:33)
J0ker, ну и где там написано, что на это должен реагировать компилятор?
terminate() срабатывает, но эжто время выполнения, а не время компиляции.
З.Ы Компилятор никому ниче не должен, поэтому стандарт полностью не соблюдается нигде(насколько я знаю), так , что уповать на стандарт не стоит.

1. компилятор ни на что не реагирует - он объктный код генерирует
2. обработка исключений (в том числе и вызов terminate()) разрешается на этапе компиляции 
3. компилятор ОБЯЗАН соответствовать cтандарту. Несоответствие стандарту является багом. Компилятор может обрабатывать некоторые расширения, которые не противоречат стандарту. Вы знаете не правильно.

Добавлено через 9 минут и 11 секунд
Цитата(rukudias @ 18.9.2008,  19:58)
ЗЫ кинь сцылку на стандарты

http://www.usatlas.bnl.gov/~dladams/cpp/IN...+14882-2003.pdf

напоминаю, что на подходе новый стандарт:
http://www.open-std.org/jtc1/sc22/wg21/doc...2008/n2705.html



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


Опытный
**


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

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



Цитата(rukudias @  18.9.2008,  17:54 Найти цитируемый пост)
НО почему компилятор не отлавливает эту ситуйовицу?

Потому что это имело бы смысл только для main.

Код
#include <iostream>

void f()
{
    try
    {
        throw ;
    }
    catch (int a)
    {
         std::cout << a << std::endl;
    }
}

int main()
{
    try
    {
        throw 10;
    }
    catch (...)
    {
        f();
    }
}


Добавлено через 36 секунд
Цитата(J0ker @  18.9.2008,  21:09 Найти цитируемый пост)
2. обработка исключений (в том числе и вызов terminate()) разрешается на этапе компиляции 

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


Опытный
**


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

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



Цитата(UnrealMan @  18.9.2008,  20:35 Найти цитируемый пост)
Потому что это имело бы смысл только для main.

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


--------------------
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.1275 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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