В старые времена до-изобилия c, следующий код никого не удивил бы: < /p>
Код: Выделить всё
struct Point {
double x;
double y;
double z;
};
double dist(struct Point *p1, struct Point *p2) {
double d2 = 0;
double *coord1 = &p1->x;
double *coord2 = &p2->x;
int i;
for (i=0; i
К сожалению, эта проблемная строка использует арифметику указателя (p[i]Если выражение p указывает на элемент x объект массива x с n элементами,
выражения p + j и j + p (где j имеет значение j) указывает на (возможно, гипотетическое) элемент
x [i + j], если 0
< /blockquote>
Принятый ответ на ссылочный вопрос использует тот факт, что язык C принимает тип Penring < /em> через профсоюзы, но я никогда не мог найти эквивалент в C ++ Стандарт. Поэтому я предполагаю, что союз, содержащий анонимный элемент структуры и массив, приведет к неопределенному поведению в C ++ - они разные языки ...
Вопрос: < /h2>
Что может быть согласованным способом итерации через членов структуры, как если бы они были членами массива в C ++? Я ищу способ текущих (C ++ 17) версий, но решения для более старых версий также приветствуются. < /P>
Отказ от ответственности: < /h3>
Это, очевидно, применяется только к элементам того же типа, и заполнение может быть обнаружена с помощью простой Assert < /code>, как показано в этом другом вопросе, поэтому накладка, выравнивание и смешанные типы не являются моей проблемой здесь. .
Подробнее здесь: https://stackoverflow.com/questions/484 ... -the-c-way