В настоящее время я использую Visual Studio Express C++ 2008 и задаю некоторые вопросы о порядке блокировки блоков. К сожалению, я не смог найти ответ в Интернете, поэтому я задаю эти вопросы экспертам.Вопросы, связанные с упорядочением операторов catch в блоке catch - спецификацией компилятора или языковым стандартом?
Я заметил, что если catch (...) не помещается в конец блока catch, компиляция завершится с ошибкой C2311. Например, следующий будет составлять:
catch (MyException)
{
}
catch (...)
{
}
, а следующий не будет:
catch (...)
{
}
catch (MyException)
{
}
а. Могу ли я спросить, определено ли это в стандарте языка C++, или это просто компилятор Microsoft, являющийся строгим?
b. У C# и Java есть те же правила?
c. В стороне я также попытался создать базовый класс и производный класс и поместить оператор catch для базового класса перед оператором catch для производного класса. Это скомпилировано без проблем. Нет ли языковых стандартов, защищающих такую практику, пожалуйста?
Re (B): раздел 8.10 спецификации C# дает подробное описание того, как это работает на C#. См. Подробности. Re (C), который является незаконным в C#. Подробности см. В разделе 8.10. –