我的C ++编译器会发出以下警告:#int; intVar'变量是"未使用"。
void MyClass::MyMethod(bool bFlag)
{
int intVar = 10;
if (bFlag)
intVar = 20;
}
为什么编译器会在变量显然被使用时执行此操作?这是否应该修复编译器以识别实际上"使用"?
答案 0 :(得分:5)
您有代码写入变量,但您没有任何代码从中读取。在这个意义上没有使用变量。
如果删除引用变量的行,则执行函数的可观察行为不会改变。这清楚地表明该变量未被使用。
答案 1 :(得分:4)
在此上下文中“使用”表示读取变量。如果您反复写入变量并且从不读取它,那么您写入变量的内容并不重要。这通常表明你忘记做任何你想做的事情,或者可以消除变量。在您的示例中,您从未阅读intVar
。将intVar = 20;
更改为(void)intVar;
以“读取”该值并丢弃结果。你会发现警告消失了。
答案 2 :(得分:2)
仅仅因为你指定它并没有使它"使用" - 当前编写函数时,优化编译器将删除赋值,因为它没有可观察到的副作用,这使得变量未被使用。