我真的不明白下面的代码发生了什么。为什么 t3 为零?

uint64_t t1 = MAXDWORD;         // t1 contains 4294967295 - CORRECT
uint64_t t2 = t1 + 1;           // t2 contains 4294967296 - CORRECT
uint64_t t3 = MAXDWORD + 1;     // t3 contains 0 (zero)   - HUH??

最佳答案

decltype(MAXDWORD) 是比 uint64_t 更窄的类型。因此表达式 MAXDWORD + 1 也不是 uint64_t,并且在赋值给 unsigned 之前观察到 t3 环绕行为。
t1 + 1 使用 unsigned 类型在 uint64_t 算法中执行,该类型更宽。

关于c++ - uint64_t t3 = MAXDWORD + 1 == 0?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53152486/

10-11 18:34