AUTOSAR C++14 Rule A7-1-6

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

Описание

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

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

Объяснение

The 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};
The 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