簡體   English   中英

為什么將此變量標記為“未使用”?

[英]Why is this variable flagged as “unused”?

我的C ++編譯器發出以下警告:以下“ intVar”變量未使用。

void MyClass::MyMethod(bool bFlag)
{
    int intVar = 10;
    if (bFlag)
        intVar = 20;
}

當顯然使用了變量時,為什么編譯器會這樣做呢? 這是編譯器應固定為可以識別為實際上“已使用”的東西嗎?

您有寫入該變量的代碼,但沒有任何可讀取的代碼。 從這個意義上說,沒有使用該變量。

如果刪除引用變量的行,則執行該函數的可觀察行為不會改變。 明確表明未使用該變量。

在這種情況下,“已使用”是指讀取變量。 如果您重復寫入變量而從未讀過它,那么您對該變量寫什么都沒關系。 通常,這表明您忘記了要執行的操作或可以消除該變量。 在您的示例中,您從未讀過intVar 更改intVar = 20; (void)intVar; 以“讀取”值並丟棄結果。 您會發現警告消失了。

示范: https : //godbolt.org/g/L3rFqM

僅僅因為分配給它並沒有使它“被使用”-正如當前編寫該函數那樣,優化編譯器將刪除該分配,因為它沒有可觀察到的副作用,這使得該變量未使用。

暫無
暫無

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

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