【发布时间】:2014-05-04 08:04:59
【问题描述】:
在我的代码中,我执行以下操作:
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 在我的系统上大小相同。
【问题讨论】: