簡體   English   中英

GNU GCC 會跟蹤以前使用箭頭操作符取消引用的對象嗎?

[英]Will GNU GCC keep track of objects which have previously been dereferenced using the arrow operator?

使用以下結構,

struct A
{
    A(int d1, int d2)
    {
        data1 = d1;
        data2 = d2;
    }

    int data1, data2;
};

下面函數中的最后一行會再次取消引用指針,還是編譯器會知道使用以前取消引用的對象?

int main()
{
    A* a = new A(1, 2);

    //dereference a
    cout << a->data1 << endl;

    //dereference a again?
    cout << a->data2 << endl;
}

如果沒有,是否有任何編譯器可以做到這一點?

我知道我可以進行實驗來測試我的問題,但是我不太了解匯編語言。

是的,在這種情況下,生成的代碼可能不會真正執行另一個取消引用。 當編譯器可以確定兩個語句之間的a不會改變時,就會發生這種情況。

這是一種常見的優化類別,並且是當人們違反嚴格的別名規則時導致許多錯誤的原因(因為這可能會破壞編譯器檢測a未更改的能力)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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