最佳答案
添加两个32位整数会导致整数溢出:
uint64_t u64_z = u32_x + u32_y;
如果首先将32位整数之一强制转换或添加到64位整数中,则可以避免此溢出。
uint64_t u64_z = u32_x + u64_a + u32_y;
但是,如果编译器决定重新排序加法:
uint64_t u64_z = u32_x + u32_y + u64_a;
整数溢出仍有可能发生。
是否允许编译器进行这种重新排序,或者我们可以相信它们会注意到结果的不一致性并保持表达式的顺序?