![](/img/trans.png)
[英]Is it a missed optimization, when a compile-time known reference takes space in a struct?
[英]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
周圍添加任何東西,這表明這種優化會違反標准)
在以下示例中, yb
指的是xa
。
int main ()
{
Foo x;
Foo y(x);
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.