Перехват исключений по умолчанию в C ++ - PullRequest
3 голосов
/ 20 августа 2009

Мне просто интересно, действительно ли системное исключение, такое как деление на ноль, на самом деле что-то «выбрасывает» в приложение. Можно ли это как-то уловить по умолчанию?

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

//say I do this
int i;
try
{
i /= 0; // My compiler (gcc) did warn abt the divide by zero :-)
}
catch (...)
{
// Can we get here  for this case?
}

Ответы [ 2 ]

3 голосов
/ 20 августа 2009

Это зависит от ОС. Вы можете сделать это в коде Visual C ++ для Windows - catch (...) также будет перехватывать так называемые структурированные исключения, которые включают деление на ноль, нарушения доступа и т. Д., Но не в скомпилированном gcc-коде в Linux.

1 голос
/ 20 августа 2009

Стандарт C ++ не говорит, что деление на ноль создает исключение - он говорит, что это неопределенное поведение.

Также, когда вы говорите:

i /= 0; // My compiler (gcc) did warn abt the divide by zero :-)

компилятор может выдавать предупреждение только в том случае, если вы делите на константу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...