Для переменной инициализации следует использовать скобку-инициализацию {} без знака equals
Для переменной инициализации используется скобка-инициализация {} без знака равенства.
Инициализация скобок:
classType Object{arg1, arg2, ...};Препятствует неявным преобразованиям сужения, таким как double на float.
Избегает неоднозначного синтаксиса, который приводит к проблеме большинства вексинговых анализов.
Например, из объявления:
ResourceType aResource();
aResource ли - функция, возвращающая переменную типа ResourceType или объект типа ResourceType.Для получения дополнительной информации смотрите Ambiguous declaration syntax.
Правило также запрещает использование = знак для инициализации, поскольку = может создать впечатление, что вызывается конструктор назначения или копирования, даже если это не так.
В целом, шашечные флаги инициализируют объект obj1 типа данных Type используя следующие форматы:
Type obj1 = obj2;
Type obj1(obj2);
Проверка допускает исключение для следующих случаев:
Инициализация переменных с типом auto использование простого назначения
Инициализация ссылочных типов с помощью простого назначения
Объявления с глобальными возможностями с использованием формата Type a() где Type является типом класса с конструктором по умолчанию. Анализ интерпретирует a как функция, возвращающая тип Type.
Инициализация переменной цикла в параллельных for OpenMP циклы, то есть в for циклические операторы, которые немедленно следуют #pragma omp parallel for
Проверка включена, только если вы задаете версию C++ C++ 11 или более позднюю. См. C++ standard version (-cpp-version).
Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».
| Группа: Деклараторы |
| Категория: Необходимый, Автоматизированный |
Ambiguous declaration syntax | Check AUTOSAR C++ 14 (-autosar-cpp14) | Improper array initialization | Non-initialized variable | Variable shadowing | Write without a further read