Rau*_*ier 11 c++ compiler-warnings gcc-warning
我们的代码中有一个错误来自该行
unsigned int i = -1;
Run Code Online (Sandbox Code Playgroud)
当代码最初编写时,是i = 0,因此是正确的.使用-Wall -Wextra,我有点惊讶gcc没有在这里警告我因为-1不适合unsigned int.
只有当打开-Wsign-conversion这条线时才会成为警告 - 但是有许多误报.我正在使用第三方库,它使用signed int进行类似于数组的操作(尽管它们不能<0),所以每当我将它与例如vector混合时,我都会收到警告 - 而且我没有看到添加数百万的强制转换(甚至第三方标题会产生很多警告).所以这对我来说太多了警告.所有这些警告都是转换"可能会改变标志".这很好,因为我知道几乎在所有情况下都没有.
但是通过上面提到的任务,我得到了相同的"可能改变"警告.这不应该是"肯定会改变标志!" 而不是"可能改变"?是否有任何方法仅针对这些"将改变"的情况发出警告,而不是针对可能的情况?
用大括号初始化它:
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};
请注意,它并不总是导致错误,可能是警告或完全禁用.您应该使用实际的工具链进行尝试.