在我的程序中,我经常使用-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:我是否真的必须在使用此值分配/比较到无符号整数时到处编写unsigned(-1),还是有一种更简洁的方法不会触发编译器警告?
UINT_MAX
有什么原因? - Sam DeHaanstd::numeric_limits<unsigned int>::max()
- Praetorian