在我的程序中,我经常使用 -1(又名 UINT_MAX)作为无符号变量的值来表示一些特殊的东西。我也比较了这个值。打开更高级别的警告消息表明编译器(VS 和 GCC)不喜欢这种语法。
// warning C4245: 'initializing' : conversion from 'int' to 'unsigned int', signed/unsigned mismatch
unsigned a = -1;
// warning C4146: unary minus operator applied to unsigned type, result still unsigned
unsigned b = -1U;
// fine but messy
unsigned c = unsigned(-1);
// no warning on VS, signed/unsigned comparison warning with GCC
if (a == -1)
{
std::cout << "check\n";
}
问题 1:上面给出的语法(每种情况)是合法的 C++ 代码吗?
问题 2:我真的必须在使用此值分配/比较无符号 int 的任何地方都写 unsigned(-1) 还是有更简洁的方法不会触发编译器警告?