如何让Visual Studio 2010警告未使用的变量?

时间:2017-06-20 07:04:37

标签: c++ visual-studio-2010 compiler-warnings stdstring

i
  1. 为什么Visual Studio会在示例中警告我未使用的变量s而不是jobs
  2. 我假设编译器不确定字符串构造函数的副作用。这是不显示警告的原因吗?
  3. 我可以以某种方式启用有关未使用的字符串变量的警告吗?
  4. 我的警告级别设置为4.

3 个答案:

答案 0 :(得分:2)

没有警告,因为实际上没有未使用的变量ssstring类的一个实例,该类有一个构造函数,在声明string s;时调用,因此s由它的构造函数使用。

答案 1 :(得分:2)

我假设编译器只会警告未使用的变量用于简单的可构造/可破坏类型。

template<typename>
struct Empty
{

};

template<typename T>
struct Trivial : Empty<T>
{
    int* p;
    int i;
};

template<typename>
struct NonTrivial
{
    NonTrivial() {}
};

template<typename>
struct TrivialE
{
    TrivialE& operator=(const TrivialE&) {}
};

struct NonTrivial2
{
    NonTrivial2() {}
};

struct NonTrivialD
{
    ~NonTrivialD() {}
};

int main()
{
    Empty<int> e;      // warning
    Trivial<int> t;    // warning
    NonTrivial<int> n; // OK
    TrivialE<int> te;  // warning
    NonTrivial2 n2;    // OK
    NonTrivialD nd;    // OK
}

Comparison of compilers' treatment

可以看出,它们是一致的。

由于std::string不可能轻易破坏,编译器不会对此发出警告。

所以回答你的问题:你做不到。

答案 2 :(得分:1)

std::string不是原始类型,而int是。{1}}。非原始类型具有构造函数和析构函数,它们可以执行一些有用的功能:内存管理,输出到屏幕等,因此非基本类型的声明并不一定意味着不使用该变量。当然,string没有做这样的事情,但可能他们会对已知类型发出警告,同时考虑到你可能想出重新定义string行为的想法(并且你可以通过编辑一些头文件来实现这一点,因为string基于模板类。)