当编译时已知的引用在非聚合结构中占用空间时,这是错过的优化吗?

gez*_*eza 5 c++ struct initialization reference language-lawyer

注意:这是对以下问题的后续问题:当编译时已知的引用在结构中占用空间时,这是否是错过的优化?,这表明聚合初始化可以通过将其初始化ba对其他变量的引用来代替作为引用的默认初始化。这个问题是关于不可能进行初始化的情况。

请参阅以下示例:

struct Foo {
    int a;
    int &b;

    Foo() : b(a) { }
};
Run Code Online (Sandbox Code Playgroud)

如果错过了优化sizeof(Foo)!=sizeof(int)吗?

我的意思是,编译器可以b从其始终引用的结构中删除它a吗?

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

(请注意,struct Foo看起来是这样。没有其他构造函数,等等。但是您可以在周围添加任何内容Foo,这表明此优化将违反标准。)

Igo*_*r G 9

在下面的示例中y.b引用x.a

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

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • @geza也许,您应该停止询问错误的问题。只需问“ *在什么情况下可以[...]进行优化?*”,然后,您不必为每种情况都提出新的问题,只需找出不可能的情况即可。 (3认同)