Позиция правила AUTOSAR A5-0-4 в отношении арифметики указателейC++

Программы на C++. Форум разработчиков
Anonymous
Позиция правила AUTOSAR A5-0-4 в отношении арифметики указателей

Сообщение Anonymous »


Правило AUTOSAR A5-0-4 гласит

Арифметика указателей не должна использоваться с указателями на неконечные значения. занятия.

Это дает следующее обоснование:

Арифметика указателей корректно определена только в том случае, если тип указателя указатель равен типу элемента массива, на который он указывает, в противном случае поведение неопределенно. Это свойство может быть гарантировано только в том случае, если Операнд-указатель — это указатель на тип, не относящийся к классу, или указатель на конечный тип. тип класса.

Затем приводятся несколько примеров соблюдения и несоблюдения требований. Одно из несоответствий меня озадачило:

void Foo(Base *start, size_t len) { // Несовместимо: арифметика указателя для неконечного типа указателя for (Base *iter = start; iter != start + len; ++iter) { итер->Сделать(); } } Как бы маловероятно, что кто-то стал бы использовать простой C-массив для хранения полиморфных указателей, он заложен в самой структуре языка C++.

Поэтому я интуитивно чувствую, что в приведенном выше коде нет ничего плохого.

Возможно, я ошибаюсь в этом убеждении. Или, возможно, я совершенно упускаю суть, которую это правило AUTOSAR пытается донести до читателя.

Может ли кто-нибудь объяснить это лучше, чем в документе AUTOSAR?

См. также правило AUTOSAR A5-0-4, в котором приведен полный код, использованный в примере.

Вернуться в «C++»