【发布时间】:2015-11-23 13:20:54
【问题描述】:
我们的代码中有一个错误来自该行
unsigned int i = -1;
最初编写代码时,是i = 0,因此是正确的。
使用-Wall -Wextra,我有点惊讶 gcc 没有在这里警告我,因为 -1 不适合 unsigned int。
仅当打开-Wsign-conversion 时,此行才会成为警告 - 但随之而来的是许多误报。我正在使用第三方库,它使用带符号的 int 执行类似数组的操作(尽管它们不能
但是对于上面提到的任务,我得到了同样的“可能改变”警告。这不应该是“肯定会改变标志!”而不是“可能会改变”?有没有办法只针对这些“将改变”的情况发出警告,而不是针对可能的情况?
【问题讨论】:
-
即使是明确的符号变化也经常被故意使用。例如,
std::string具有static const size_type npos = -1;。 -
-1 is used with unsigned types 因为它的结果已经被标准很好地定义了。
-
使用无符号来确保变量不会为负是另一个错误:D
-
@AngelusMortis Nah。在这里要准确很重要:使用
unsigned来确保数字不会是负数,这绝对是正确的做法。它不做的(但请参阅下面的答案)是防止赋值和负数的转换。但这些都是不同的问题。 -
@KonradRudolph meh 我刚开始学习 c++,只是想给人留下印象,我更像是个白痴:D
标签: c++ compiler-warnings gcc-warning