强制转换为无符号。

这样做正确吗?
typedef unsigned int Index;

enum
{
  InvalidIndex = (Index) -1 
};
我已经知道跨平台是不安全的,但是我已经在很多“专业”代码中看到了这一点……     
已邀请:
        您所读的内容可能是出于恐惧,不确定性和怀疑。您所读的任何内容的作者都可能认为ѭ1正在溢出,并且在没有发生位表示的系统上给您造成ѭ2的麻烦,这可能会引起混乱。 但是,作者是错误的,因为该标准保证了无符号值在到达其范围的边缘时会回绕。无论涉及什么位表示,
(unsigned)-1
都是
std::numeric_limits<unsigned>::max()
。期。 不过,我不确定它的好处是什么。您将获得那么大的最大值。如果还可以,我想您很好。     
        如果您想获得UINT_MAX,我很确定这实际上是最好的方法。将-1转换为
unsigned
可以保证产生UINT_MAX。在评论中有解释。     
        这是不安全的,因为没有明确定义枚举。 请参阅C ++枚举是签名的还是未签名的?有关更多信息。 归根结底,您所写的内容最终将变成翻译中的(int)(unsigned int)(int),因此我不确定您要完成的工作。     
        不太确定这是否是实现定义的,但是将-1(显然是带符号的)强制转换为无符号的整数会导致下溢,通常会导致极大的值(即INT_MAX)。     

要回复问题请先登录注册