Я понимаю причину, по которой expr.add#4.2 ограничивает + и - указателями, нацеленными на элементы одного и того же массива, что было объяснено в нескольких комментариях к моему вопросу относительно класса указателя смещения. Однако то же самое можно сделать, если и указатель, и указатель плюс целевые объекты смещения находятся в одной и той же (вложенной) композиции, а не обязательно в массиве. Если бы эти различия могли быть какими угодно, макрос offsetof был бы бессмысленным.
Пример, демонстрирующий аналогию offsetof:
Код: Выделить всё
#include
#include
struct Inner
{
int i1;
float f;
bool b;
int i2;
};
struct Outer
{
int i1;
char c;
int i2;
Inner inner;
double d;
};
int main(int argc, char* argv[])
{
Outer outer;
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78429504/is-the-calculation-of-pointer-offsets-between-non-array-composition-members-defi[/url]