在我的代码中,我执行以下操作:
double a = 3.0;
uint64_t b = static_cast<uint64_t>(a);
double c = static_cast<double>(b);
有趣的是,只要 a 是正数,这就像我所期望的那样工作 (a == c),但如果 a 是负数,c 最终会成为一个任意大的正数。(它一定是包裹在某处或某处。)
我的问题是:
- 为什么会这样?
- 为什么这段代码不违反严格的别名规则?
注意: double 和 uint64_t 在我的系统上是相同的大小。