Позиция правила AUTOSAR A5-0-4 в отношении арифметики указателей ⇐ C++
Позиция правила AUTOSAR A5-0-4 в отношении арифметики указателей
Правило 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, в котором приведен полный код, использованный в примере.
Правило 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++: использование арифметики указателей для доступа к функциям-членам объектов
Anonymous » » в форуме C++ - 0 Ответы
- 30 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Различаются ли C и C++ в отношении законности выравнивания указателей во время выполнения?
Anonymous » » в форуме C++ - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Различаются ли C и C++ в отношении законности выравнивания указателей во время выполнения?
Anonymous » » в форуме C++ - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Различаются ли C и C++ в отношении законности выравнивания указателей во время выполнения?
Anonymous » » в форуме C++ - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-