Спецификация noexcept функции должна быть либо идентичной во всех модулях перевода, либо идентичной или более ограничительной между функцией виртуального представитель и переопределителем
Спецификация noexcept функции должна быть либо идентичной во всех модулях преобразования, либо идентичной или более ограничительной между функцией виртуального представитель и переопределителем.
Модулями перевода являются различные исходные файлы, которые компилирует компилятор. Когда функция имеет другую спецификацию исключений в разных исходных файлах, это может привести к неопределенному поведению. Точно так же другая спецификация исключения полиморфной функции на разных уровнях иерархии классов может привести к отказу компиляции в некоторых случаях. В зависимости от используемого программного обеспечения и оборудования различные спецификации исключений функции в разных местах могут вызвать отказ компиляции или привести к неопределенному поведению, приводящему к уязвимостям безопасности.
Чтобы избежать неопределенного поведения и уязвимостей безопасности:
Сохраните ту же спецификацию исключения во всех объявлениях функции.
Если виртуальная функция объявлена при помощи noexcept
или noexcept(true)
в качестве спецификации исключения объявите функции переопределителя в производных классах с помощью той же спецификации.
Если виртуальная функция объявлена при помощи noexcept(false)
в качестве спецификации исключения объявите функции переопределителя в производных классах при помощи noexcept(false)
или noexcept(true)
как спецификация исключения.
Polyspace® помечает спецификацию исключения функции, если функция объявлена с различными спецификациями исключений в различных местах файла. Polyspace помечает функцию-переопределитель в производном классе, если она задана как noexcept(fale)
в то время как виртуальная функция в базовом классе задана как noexcept
.
Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».
Группа: Обработка исключений |
Категория: Необходимый, Автоматизированный |