未检测到未使用的变量

时间:2010-11-01 16:24:48

标签: c++ gcc g++ gcc-warning

我使用g ++ 4.3.0编译这个例子:

#include <vector>

int main()
{
  std::vector< int > a;
  int b;
}

如果我使用最大警告级别编译示例,我会收到一条警告,指出未使用变量 b

[vladimir@juniper data_create]$ g++ m.cpp -Wall -Wextra -ansi -pedantic
m.cpp: In function ‘int main()’:
m.cpp:7: warning: unused variable ‘b’
[vladimir@juniper data_create]$

问题是:为什么变量 a 未报告为未使用? 我必须传递哪些参数才能获得变量 a 的警告?

3 个答案:

答案 0 :(得分:23)

理论上,std::vector<int>的默认构造函数可能有任意副作用,因此编译器无法确定删除a的定义是否会改变程序的语义。您只能获得内置类型的警告。

更好的例子是锁:

{
    lock a;
    // ...
    // do critical stuff
    // a is never used here
    // ...
    // lock is automatically released by a's destructor (RAII)
}

即使a在定义后从未使用过,但删除第一行也是错误的。

答案 1 :(得分:1)

a不是内置类型。您实际上正在调用std::vector<int>的构造函数并将结果分配给a。编译器将此视为用法,因为构造函数可能有副作用。

答案 2 :(得分:1)

a实际上是在声明它之后使用的,因为它的析构函数在其作用域的末尾被调用。

相关问题