Статические и локальные объекты должны быть постоянно инициализированы
Статические и локальные объекты должны быть постоянно инициализированы.
Статические и локальные объекты потока инициализируются в начале выполнения кода. Стандарт языка C++ только частично определяет порядок инициализации нескольких статических или локальных по потоку объектов, и порядок может изменяться от построения к построению. При инициализации статического или локального по потоку объекта из другого такого объекта компилятор может получить доступ к последнему объекту до его инициализации. Чтобы избежать доступа перед инициализацией, инициализируйте статические и локальные объекты, используя объекты, которые вычисляются как постоянные во время компиляции. Инициализация константами происходит до инициализации переменными и часто происходит во время компиляции.
Это правило применяется к глобальным переменным, статическим переменным, переменным члена статического класса и переменным статической функции-области.
Polyspace ® помечает инициализации статических или локальных по потоку объектов с помощью инициализаторов и конструкторов, которые не вычисляются до констант во время компиляции. Для постоянной инициализации статических или локальных объектов используется следующее:
A constexpr конструктор только с постоянными аргументами
Константное выражение
Стоимость
Поскольку строковые объекты используют динамическое выделение памяти неизвестного размера, компилятор не может вычислить их во время компиляции. Polyspace помечает инициализацию строковых объектов независимо от того, задан ли инициализатор.
Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.
| Группа: Основные понятия |
| Категория: Обязательно, Автоматизировано |