AUTOSAR C++14 Rule A8-5-3

Переменная автоматического типа не должна быть инициализирована с помощью {} или = {} закрепленная инициализация.

Описание

Управляйте определением

Переменная автоматического типа не должна быть инициализирована с помощью {} или = {} закрепленная инициализация.

Объяснение

Введите вычет за auto имеет парадоксальный результат, когда инициализация использует фигурные скобки. Выведенным типом является std::initializer_list<> вместо типа, который вы можете предположить от инициализатора.

Например, определение:

auto x{1};
результаты в типе x быть std::initializer_list<int> вместо int. Некоторые компиляторы выводят int введите из этого определения, но поведение не универсально через компиляторы.

Реализация Polyspace

Средство проверки отмечает определения переменной, которые используют тип auto если переменная инициализируется с помощью {} или ={} заключенная в фигурные скобки инициализация.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

развернуть все

#include<initializer_list>

void func() {
    auto aVar{1}; //Noncompliant
    auto anotherVar(1); //Compliant
    int aThirdVar{1}; //Compliant
    
    auto aVarList{1,2,3}; //Noncompliant
    std::initializer_list<int> anotherVarList{1,2,3}; //Compliant
}

В этом примере правило нарушено когда auto тип используется с заключенной в фигурные скобки инициализацией. Вместо auto, предпочтена явная спецификация типа. В качестве альтернативы инициализация может использовать круглую скобку (), который гарантирует ожидаемый вычет типа.

Проверяйте информацию

Группа: операторы объявления

Введенный в R2020a