i
s
而不是jobs
?我的警告级别设置为4.
答案 0 :(得分:2)
没有警告,因为实际上没有未使用的变量s
。 s
是string
类的一个实例,该类有一个构造函数,在声明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
基于模板类。)