簡體   English   中英

當編譯時已知引用占用非聚合結構中的空間時,它是否是錯過的優化?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM