Как компилятор обрабатывает исключения, которые неявны? Поиск стратегий разработки

Всюду по функции handleException исключение встречается неявным. Как компилятор обрабатывает такую ​​неявную передачу исключений? [Например. в методах C ++ указатель this передается учетной записи для текущего объекта. Мой вопрос: как компилятор обрабатывает исключения внутри - handleException не имеет аргументов.]

 void handleException()
 {
   try {
     throw;
   }
   catch (MyException& e) {
     ...code to handle MyException...
   }
   catch (YourException& e) {
     ...code to handle YourException...
   }
 }

 void f()
 {
   try {
     ...something that might throw...
   }
   catch (...) {
     handleException();
   }
 }
1 голос | спросил Fanatic23 19 Jam1000000amWed, 19 Jan 2011 09:13:36 +030011 2011, 09:13:36

1 ответ


3
  

Не обращайте внимания на этого человека за занавеской.

Поскольку компилятор знает, как он реализует исключения, он может использовать эту внутреннюю информацию. Самый простой способ - использовать глобальную (или поточную локальную) переменную для хранения информации о любом «активном» исключении; затем извлеките это, в основном для получения информации о типе и распространения. C ++ 0x частично предоставляет эту информацию с помощью std :: exception_ptr; см. §18.8.5 в N3225.

Исключения обрабатываются иначе, чем параметры; аналог «этого» не поможет. Значение «this» обычно рассматривается как обычный параметр указателя, за исключением того, что скрывается от пользователя за занавеской.

ответил Fred Nurk 19 Jam1000000amWed, 19 Jan 2011 09:29:45 +030011 2011, 09:29:45

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132