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