Я узнал, что когда я указываю вид исключения, функция может выдать
другие не могут быть выброшены, но когда я тестировал этот код, он не следовал этому правилу.
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;
}
Я что-то не так понял?
Спецификации исключений работают не так, как вы думали.
Вы по-прежнему можете выбросить любое исключение, но если вы на самом деле позволите чему-либо, не указанному в списке, скрыться, вам позвонят unexpected()
а также terminate()
,
Это распространенная ошибка — думать, что спецификация исключения похожа на Java, но это не так. Большинство рекомендаций гласит, что не следует их использовать, возможно, за исключением throw (). Некоторые компиляторы указанный не реализовывать их (проверьте MSVC Dox, если вы используете тот). Они устарели в текущем стандарте (C ++ 11). __noexcept (true / false) переносит разумный вариант использования.
Других решений пока нет …