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