Все вызванные исключительные ситуации должны быть уникальными
Все вызванные исключительные ситуации должны быть уникальными.
Если тот же объект повышен, как исключения в нескольких местах, обрабатывая эти исключения и отлаживая код могут затруднить. Повышение уникальных объектов исключения упрощает процесс отладки. Рассмотрите этот код, где несколько исключений повышены.
void f1(){ //... throw std::logic_error("Error"); } void f2(){ //... throw std::logic_error("Error"); } void f3(){ //... throw std::logic_error("f3: Unexpected Condition"); } int main(){ try{ f1(); f2(); f3(); catch(std::logic_error& e){ std::cout << e.what() << '\n'; } } }
f1()
и f2()
повысьте то же исключение, в то время как f3()
повышает уникальное исключение. Во время отладки вы не можете определить, является ли исключение результатом f1()
или f2()
. Вы знаете, когда исключение является результатом f3()
. Чтобы сделать процесс отладки более простым, повысьте уникальные исключения. Исключение уникально, если любое из этих условий верно:
Тип исключительной ситуации не происходит в другом месте в вашем проекте.
Сообщение об ошибке или код ошибки не происходят в другом месте в вашем проекте.
Polyspace® подсветки throw
операторы, которые повышают тот же класс, перечисление значений, целое число или постоянный литерал как исключения, и отмечают итоговый оператор броска, которые повышают тот же объект. Вы можете хотеть повысить то же исключение в нескольких местах при помощи предварительно созданного объекта исключения. Polyspace не делает флага throw
операторы, которые повышают такие предварительно созданные объекты исключения. Если вы повышаете тот же литеральный объект в нескольких местах, Polyspace не отмечает его, если литерал не является константой или если литерал скрыт позади переменной.
Если вы ожидаете нарушение правила, но не видите его, относитесь, чтобы Диагностировать, Почему Кодирующие Стандартные Нарушения Не Появляются как ожидалось.
Группа: Обработка исключений |
Категория: консультация, автоматизированная |