exponenta event banner

Правило AUTOSAR C++ 14 A7-1-6

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

Описание

Определение правила

Спецификатор typedef не используется.

Объяснение

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

Начиная с C++ 11, using позволяет определить псевдонимы шаблонов, когда аргументы шаблона не привязаны к типу данных. Например, следующие инструкции определяют псевдоним 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 добавьте комментарий, оправдывающий эти результаты. См. раздел Результаты анализа пространства адресов с помощью исправлений ошибок или обоснований.

Поиск неисправностей

Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.

Примеры

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

#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