我看到一些看起来像这样的代码:
Object *area = new Object[n];
memset(area, 0xff, sizeof(Object) * count);
所以这会用位 1 填充对象数组的每个字段。然后有多个地方通过检查 ~0(负零)来检查对象的字段是否尚未填充:
const unsigned int NULL_INDEX = ~0;
...
if(object.field == NULL_INDEX) {...}
该 Object 类上的字段是 unsigned int 类型。我很困惑为什么 0xff 在无符号整数上可以被评估为等于〜0?我看到另一篇关于0xff 在 2 的补码系统上等于 -1 的帖子,并发现另一篇我认为这意味着 C++ 程序是否将 0xff 解释为 -1 或 ~0 取决于系统?
当填充 0xff 时,C++ 中检查整数的可移植方式到底是什么?是否应该根据 unsigned int 或 signed int 检查?我很混乱...