我们的代码出现了一个bug,来自这一行:
unsigned int i = -1;
当代码最初编写时,它是i = 0
,因此是正确的。使用-Wall -Wextra
,我有点惊讶,因为-1无法适应无符号整数。只有当开启
-Wsign-conversion
时,这行才会成为一个警告,但同时也会有很多错误的警告。 我正在使用第三方库进行类似数组的操作,其中包含有符号整数(虽然它们不能为< 0),所以每当我将其与例如向量混合时,我都会得到警告。而且我不认为在这里添加数百万个强制转换是有意义的(即使第三方头文件还会产生大量警告)。 所以对我来说这涉及太多的警告了。所有这些警告都是指这种转换“可能会改变符号”。这没关系,因为我知道在几乎所有情况下都不会改变符号。但是针对上面提到的赋值语句,我却得到了相同的“可能改变”警告。这难道不应该是“一定会改变符号!”而不是“可能改变”的吗?是否有任何方法仅针对这些“一定会改变”的情况发出警告,而不是其他可能情况呢?
std::string
具有static const size_type npos = -1;
。 - interjay