Посмотрите на этот простой код:
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;
вместо этого?