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