次の簡単なコードを見てください。
struct Point {
int x;
int y;
};
void something(int *);
int main() {
Point p{1, 2};
something(&p.x);
return p.y;
}
へのアクセス権がないため、 へのポインタのみを取得するため、mainの戻り値は に最適化できると思います。return 2;somethingp.yp.x
しかし、主要なコンパイラはいずれも to の戻り値を最適化しませmainん2。ゴッドボルト。
へのアクセスのみを許可する場合、標準somethingに変更を許可するものはありますか? はいの場合、これは標準レイアウトがあるかどうかに依存しますか?p.yp.xPoint
代わりにsomething(&p.y);, andを使用するとどうなりますか?return p.x;