Для переменной инициализации следует использовать скобку-инициализацию {} без знака 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