AUTOSAR C++14 Rule A7-1-6

Спецификатор определения типа не должен использоваться

Описание

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

Спецификатор определения типа не должен использоваться.

Объяснение

using синтаксис является лучшей альтернативой typedef- s для определения псевдонимов.

Начиная с C++ 11, using синтаксис позволяет вам псевдонимам шаблона define, где аргументы шаблона не связаны с типом данных. Например, следующие операторы задают псевдоним vectorType для vector, где аргумент T не связан с типом данных и может быть подставлен позже:

template<class T, class Allocator = allocator<T>> class vector;
template<class T> using vectorType = vector<T, My_allocator<T>>;
vectorType<int> primes = {2,3,5,7,11,13,17,19,23,29};
typedef ключевое слово не позволяет задавать такие псевдонимы шаблона.

Реализация Polyspace

Средство проверки правила отмечает все использование typedef ключевое слово.

Если вы не хотите удалять определенные экземпляры typedef ключевое слово, добавляет комментарий, выравнивающий по ширине те результаты. Смотрите Результаты Polyspace Адреса Через Исправления ошибок или Выравнивания.

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

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

Примеры

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

#include <cstdint>
#include <type_traits>

typedef std::int32_t (*fptr1) (std::int32_t); //Noncompliant
using fptr2 = std::int32_t (*) (std::int32_t); //Compliant

template <class T> using fptr3 = std::int32_t (*) (T); //Compliant

Определения псевдонима для fptr1 и fptr2 точно эквивалентны. Нет никакого typedef эквивалентный для определения псевдонима для fptr3.

Использование typedef- s нарушает это правило. Правило требует, чтобы вы придерживались using синтаксис для непротиворечивости, даже когда typedef эквивалентный существует.

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

Группа: Выражения
Категория: необходимый, автоматизированный
Введенный в R2019a