当编译时已知引用在非聚合结构中采用 space 时,是否错过了优化?

Is it a missed optimization, when a compile-time known reference takes space in a non-aggregate struct?

注意:这是的后续问题,它表明聚合初始化可以代替b的默认初始化作为对a的引用,方法是对其他一些变量的引用。这个问题是关于当聚合初始化不可能时会发生什么。

看这个例子:

struct Foo {
    int a;
    int &b;

    Foo() : b(a) { }
};

如果sizeof(Foo)!=sizeof(int),是否错过了优化?

我的意思是,编译器能否从结构中删除 b,因为它始终引用 a

有什么可以阻止编译器进行这种转换吗?

(注意,struct Foo看起来就是这样,没有额外的构造函数等。但是你可以在Foo周围添加任何东西,这表明这种优化会违反标准)

在下面的例子中y.b指的是x.a

int main ()
{
    Foo     x;
    Foo     y(x);

    return 0;
}