Можно ли получить указатель на один подобъект через указатель на другой, не связанный объект?

Посмотрите на этот простой код:

struct Point {
    int x;
    int y;
};

void something(int *);

int main() {
    Point p{1, 2};

    something(&p.x);

    return p.y;
}

Я ожидаю, что возвращаемое значение main может быть оптимизировано до return 2;, так как something не имеет доступа к p.y , он получает только указатель на p.x.

Но ни один из основных компиляторов не оптимизирует возвращаемое значение от main до 2. Godbolt .

Есть ли в стандарте что-то, что позволяет something модифицировать p.y, если мы только даем доступ к p.x? Если да, зависит ли это от того, имеет ли Point стандартное расположение?

Что если я использую something(&p.y); и return p.x; вместо этого?

51
задан curiousguy 18 September 2019 в 02:22
поделиться