Псевдонизация структуры и массивов C ++C++

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

Сообщение Anonymous »

Это продолжение C ++ для другого моего вопроса < /p>

В старые времена до-изобилия 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 + i)) вне любого массива, который явно не разрешен стандартом. Проект 4659 для C ++ 17 говорит в 8.7 [expr.add]: < /p>


Если выражение 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
Ответить

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

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

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

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

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