exponenta event banner

Правило AUTOSAR C++ 14 M5-0-15

Индексация массива должна быть единственной формой арифметики указателя

Описание

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

Индексация массива должна быть единственной формой арифметики указателя.

Объяснение

Можно пройти массив или контейнер двумя способами:

  • Приращение или уменьшение индекса массива или итератора, а затем использование индекса массива или итератора для доступа к элементу.

  • Приращение или уменьшение указателя на массив, а затем отмена привязки указателя.

Первый метод является более четким и менее подверженным ошибкам.

Все другие формы явной арифметики указателей создают риск доступа к непреднамеренным ячейкам памяти.

Внедрение Polyspace

Флаги средства проверки:

  • Арифметические операции для всех указателей, например p+I, I+p и p-I, где p является указателем и I целое число.

    Исключение допускается для итераторов, указывающих на элементы в контейнерах, например: it ниже:

    std::vector<int> intList{ 1,2,3,4 };
    for( auto it = intList.begin() ; it != intList.end() ; ++it )

  • Индексирование массива на указателях, не являющихся массивами.

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

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

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

Группа: Выражения
Категория: Обязательно, Автоматизировано
Представлен в R2019a