Перебор массива полиморфных объектовC++

Программы на C++. Форум разработчиков
Anonymous
Перебор массива полиморфных объектов

Сообщение Anonymous »

Рассмотрим следующий код:

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

#include 

struct B {
char i;
B(char i) : i(i) {};
void bar() {};
};

struct D : B {
int y;
D(char i, int y) : B(i), y(y) {};
};

void foo(B *arr, size_t size)
{
for(B *end = arr + size; arr < end; ++arr) {
std::cout i При переборе массива, производного по указателю на базу в полиморфном контексте, какое смещение будет использоваться по стандарту?
[/list]
I просмотрел стандарт и не нашел никаких упоминаний об информации времени выполнения, влияющей на смещения.
[expr.add] на самом деле не проясняет этот вопрос. Технически это означает, что результирующий указатель должен указывать на элемент массива.
Для меня становится очень странно, когда я печатаю команду foo:
[code]#include 

struct B {
char i;
B(char i) : i(i) {};
virtual void foo() { std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/78546477/iterating-over-array-of-polymorphic-objects[/url]

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