c++ - 类型转换签名到无符号

标签 c++ unsigned

这样做是否正确?

typedef unsigned int Index;

enum
{
  InvalidIndex = (Index) -1 
};

我读过它跨平台是不安全的,但我在很多“专业”代码中看到了这一点......

最佳答案

您阅读的内容可能是出于恐惧、不确定性和怀疑。无论你读到什么,作者可能认为 (unsigned)-1正在下溢并可能在位表示不会恰好给你的系统上造成困惑 UINT_MAX为你的麻烦。

但是,作者错了,因为标准保证无符号值在到达范围边缘时回绕。无论涉及什么位表示,(unsigned)-1 std::numeric_limits<unsigned>::max() .期间。

不过,我不确定这样做有什么好处。您将获得那么大的最大值。如果没问题,我想您可以开始了。

关于c++ - 类型转换签名到无符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6191508/

相关文章:

c++ - QGraphicsBlurEffect 调整 Text 的大小但不调整 Widget 本身

c++ - std::unique_ptr 的推荐用法

c++ - 无符号变量的默认值是多少?

java - Java 字节数组中的无符号字节

c++ - 使用自定义深度测试的深度对抗解决方案

c++ - CL.EXE - 编译输出程序集

assembly - MIPS 32 位无符号乘法,不使用 mult 或 div

c - 为什么使用#define DEF ((unsigned) -1) 而不是#define 0xFFFFFFFF

c - 有符号和无符号数据类型之间的区别?

c++ - Boost MPI 在监听列表时不释放资源?