64位变量做右值,32位变量做左值进行运算,编译器自动将64位变量优化位32位,是否可以避免这种优化?

{
uint64_t u64_1 = 0;
uint32_t u32_1 = 0xFFFFFFFF;
u64_1 = u32_1 + 1;
}
如上此时u64_1 = 0x0, 而不是预期的0x1 0000 0000;

{
uint64_t u64_1 = 0;
uint32_t u32_1 = 0xFFFFFFFF;
u64_1 = (uint64_t)u32_1 + 1;
}
如上结果则是预期的0x1 0000 0000;

由于需要强制类型转换,代码编写时很容易出现遗漏,请问是否有其他解决方案?

这个没办法,你得将其中一个加法元素定义为uint64_t才行