Могу ли я получить доступ к элементам стандартного массива с указателем на базовый классC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Могу ли я получить доступ к элементам стандартного массива с указателем на базовый класс

Сообщение Anonymous »

Предполагая, что у меня есть непустый базовый класс и полученный класс, оба стандартного лайаута, и я создаю массив полученного , могу ли я выполнить этот массив с указателем на базу ?

Код: Выделить всё

#include 

struct Base { int x; };
struct Derived : Base {};
static_assert(std::is_standard_layout_v);
static_assert(sizeof(Base[2]) == sizeof(Derived[2]));

int main() {
Derived a[3];
Base* b = a;
b = b + 2; // is this valid?
}
< /code>
[expr.add]
говорит: «Добавление значения, отличного от 0 или 1, к указателю к базовому субобекту класса, субобекту члену или полный объект приводит к неопределенному поведению».
также [expr.add] говорит: «Если выражения p имеют тип« для добавления [...], если выражение p имеет тип pv at a a wry whip -lection, а не Arr -lection, где Traver the not the foreme this the not the fore not the forement the not the fore not the forement the not the foremet loge the foremay Неопределенный ".
и« аналогичный »определяется в [conv.qual] :« Два типа T1 и T2 похожи, если [...], а типы, обозначенные U, одинаковы. »
, очевидно, это не так, как это не так, для Iterate с опорой для базового класса,
, но может быть стандартным, чтобы быть стандартным. /> или стандартный лайт только для профсоюзов? < /p>

Подробнее здесь: https://stackoverflow.com/questions/796 ... base-class
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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