C++:需要警告:unsigned int i = -1;

Rau*_*ier 11 c++ compiler-warnings gcc-warning

我们的代码中有一个错误来自该行

unsigned int i = -1;
Run Code Online (Sandbox Code Playgroud)

当代码最初编写时,是i = 0,因此是正确的.使用-Wall -Wextra,我有点惊讶g​​cc没有在这里警告我因为-1不适合unsigned int.

只有当打开-Wsign-conversion这条线时才会成为警告 - 但是有许多误报.我正在使用第三方库,它使用signed int进行类似于数组的操作(尽管它们不能<0),所以每当我将它与例如vector混合时,我都会收到警告 - 而且我没有看到添加数百万的强制转换(甚至第三方标题会产生很多警告).所以这对我来说太多了警告.所有这些警告都是转换"可能会改变标志".这很好,因为我知道几乎在所有情况下都没有.

但是通过上面提到的任务,我得到了相同的"可能改变"警告.这不应该是"肯定会改变标志!" 而不是"可能改变"?是否有任何方法仅针对这些"将改变"的情况发出警告,而不是针对可能的情况?

Que*_*tin 5

用大括号初始化它:

unsigned int i{-1};
Run Code Online (Sandbox Code Playgroud)

GCC产出:

main.cpp:3:22: error: narrowing conversion of '-1'
from 'int' to 'unsigned int' inside { } [-Wnarrowing]
     unsigned int i{-1};

请注意,它并不总是导致错误,可能是警告或完全禁用.您应该使用实际的工具链进行尝试.