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