Нет ограничений на типы исключений броска

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

void foo(int i)throw(int)
{
if(i==2)
{
throw("exception");
}
}
int main()
{
int i=2;
try
{
foo(i);
}
catch(const char* ex)
{
cout<<ex<<endl;
}
return 0;
}

Я что-то не так понял?

0

Решение

Спецификации исключений работают не так, как вы думали.

Вы по-прежнему можете выбросить любое исключение, но если вы на самом деле позволите чему-либо, не указанному в списке, скрыться, вам позвонят unexpected() а также terminate(),

Это распространенная ошибка — думать, что спецификация исключения похожа на Java, но это не так. Большинство рекомендаций гласит, что не следует их использовать, возможно, за исключением throw (). Некоторые компиляторы указанный не реализовывать их (проверьте MSVC Dox, если вы используете тот). Они устарели в текущем стандарте (C ++ 11). __noexcept (true / false) переносит разумный вариант использования.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]