gez*_*eza 5 c++ struct initialization reference language-lawyer
注意:这是对以下问题的后续问题:当编译时已知的引用在结构中占用空间时,这是否是错过的优化?,这表明聚合初始化可以通过将其初始化b
为a
对其他变量的引用来代替作为引用的默认初始化。这个问题是关于不可能进行初始化的情况。
请参阅以下示例:
struct Foo {
int a;
int &b;
Foo() : b(a) { }
};
Run Code Online (Sandbox Code Playgroud)
如果错过了优化sizeof(Foo)!=sizeof(int)
吗?
我的意思是,编译器可以b
从其始终引用的结构中删除它a
吗?
有什么阻止编译器进行这种转换的吗?
(请注意,struct Foo
看起来是这样。没有其他构造函数,等等。但是您可以在周围添加任何内容Foo
,这表明此优化将违反标准。)
在下面的示例中y.b
引用x.a
。
int main ()
{
Foo x;
Foo y(x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)