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>, как показано в этом другом вопросе, поэтому накладка, выравнивание и смешанные типы не являются моей проблемой здесь. .
Это продолжение C ++ для другого моего вопроса < /p>
В старые времена до-изобилия c, следующий код никого не удивил бы: < /p>
[code]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][/code] быть по определению *(p + i)) вне любого массива, который явно не разрешен стандартом. Проект 4659 для C ++ 17 говорит в 8.7 [expr.add]: < /p>
Если выражение p указывает на элемент x [i] объект массива x с n элементами, выражения p + j и j + p (где j имеет значение j) указывает на (возможно, гипотетическое) элемент x [i + j], если 0 < /blockquote>
Принятый ответ на ссылочный вопрос использует тот факт, что язык C принимает тип Penring < /em> через профсоюзы, но я никогда не мог найти эквивалент в C ++ Стандарт. Поэтому я предполагаю, что союз, содержащий анонимный элемент структуры и массив, приведет к неопределенному поведению в C ++ - они [b] [/b] разные языки ...
Вопрос: < /h2>
Что может быть согласованным способом итерации через членов структуры, как если бы они были членами массива в C ++? Я ищу способ текущих (C ++ 17) версий, но решения для более старых версий также приветствуются. < /P>
Отказ от ответственности: < /h3>
Это, очевидно, применяется только к элементам того же типа, и заполнение может быть обнаружена с помощью простой Assert < /code>, как показано в этом другом вопросе, поэтому накладка, выравнивание и смешанные типы не являются моей проблемой здесь. .