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