Только экземпляры типов вывели из станд.:: исключение должно быть выдано
Только экземпляры типов вывели из станд.:: исключение должно быть выдано.
При повышении родовых объектов, когда исключения могут сделать код трудным считать и снова использовать. Рассмотрите этот код, где исключения повышены в двух различных 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; оператор.
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
| Группа: Обработка исключений |
| Категория: консультация, автоматизированная |