AUTOSAR C++14 Rule A5-2-4

reinterpret_cast не должен использоваться

Описание

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

reinterpret_cast не должен использоваться.

Объяснение

reinterpret_cast обычно используется, чтобы явным образом преобразовать между двумя несвязанными типами данных. Например, в этом примере, reinterpret_cast преобразует тип struct S* к int*:

struct S { int x; } s;
int* ptr = reinterpret_cast<int*> (&s);

Однако это затрудняет, чтобы использовать reinterpret_cast и не нарушают безопасность типов. Если результат reinterpret_cast указатель, безопасно разыменовать указатель только после того, как вы бросаете указатель назад на его исходный тип.

Реализация Polyspace

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

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

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

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

Примеры

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

class A {
    int x;
    int y;
    public:
      void getxy();
};

class B {
    int z;
    public:
      void getz();
};

void func (B* Bptr) {
    A* Aptr = reinterpret_cast<A*>(Bptr); // Noncompliant
}

Использование reinterpret_cast нарушает это правило. Результат reinterpret_cast не безопасно разыменовать начиная с A и B несвязанные классы. Разыменование Aptr как будто это был A* указатель может привести к недопустимому доступу к памяти.

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

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