AUTOSAR C++14 Rule 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