unsigned int flags = -1; // all bits are true
“这是实现此目的的一种好方法吗?”
随身携带? 是的。
好? 值得商bat的,此线程上显示的所有混乱证明了这一点。足够清晰,以使您的同行程序员可以理解代码而不会引起混淆,这应该是我们衡量良好代码的维度之一。
另外,此方法容易产生编译器警告。要消除警告而不损害编译器,您需要显式强制转换。例如,
unsigned int flags = static_cast<unsigned int>(-1);
显式强制转换要求您注意目标类型。如果您关注目标类型,那么您自然会避免其他方法的陷阱。
我的建议是要注意目标类型,并确保没有隐式转换。例如:
unsigned int flags1 = UINT_MAX;
unsigned int flags2 = ~static_cast<unsigned int>(0);
unsigned long flags3 = ULONG_MAX;
unsigned long flags4 = ~static_cast<unsigned long>(0);
所有这些对您的程序员都是正确的,并且更加显而易见。
并且使用C ++ 11:我们可以auto
使这些更简单:
auto flags1 = UINT_MAX;
auto flags2 = ~static_cast<unsigned int>(0);
auto flags3 = ULONG_MAX;
auto flags4 = ~static_cast<unsigned long>(0);
我认为正确和明显比单纯正确更好。