AUTOSAR C++ 14 правил 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);
}

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

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

Группа: Выражения

Введенный в R2019a