Только экземпляры типов вывели из станд.:: исключение должно быть выдано
Только экземпляры типов вывели из станд.:: исключение должно быть выдано.
При повышении родовых объектов, когда исключения могут сделать код трудным считать и снова использовать. Рассмотрите этот код, где исключения повышены в двух различных try-catch
блоки.
try{ //.. throw 1; // 1 means logic error; } catch(...){ //... } //... try{ //... throw std::logic_error{"Logic Error"}; } catch(std::exception& e){ //.. }
Во втором блоке кода, значении и причине исключения ясно передается путем повышения определенного и уникального типа объекта как исключение. Такой throw
операторы также совпадают со стандартными соглашениями. Очевидно передача намерения разработчика, соответствование стандартным соглашениям и повышение уникального типа исключений делают код легким считать, изучить, и снова использовать.
Класс std::exception
обеспечивает сопоставимый интерфейс, чтобы повысить уникальные исключения, соответствующие определенным ошибкам. Это - стандартное соглашение использовать этот интерфейс для повышения исключений. Чтобы сделать ваш код читаемым и допускающим повторное использование, повысьте объекты определенных типов, которые выведены из std::exception
как исключение. Родовые объекты типа std::exception
не может быть уникальным. Такие исключения нарушают это правило.
Polyspace® отмечает throw
оператор, если тип повышенного объекта не является классом, который публично выведен из std::exception
.
Если повышенный объект является частью иерархии наследования кратного, то Polyspace отмечает объект, если ни один из базовых классов не выводит публично из std::exception
или если базовые классы не включают std::exception
.
Если вы используете throw;
оператор без аргумента в блоке выгоды, Polyspace не отмечает throw;
оператор.
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
Группа: Обработка исключений |
Категория: консультация, автоматизированная |