【发布时间】:2018-11-02 23:07:42
【问题描述】:
我偶然发现了一个我认为不必要的功能,并且通常会吓到我:
float coerceToFloat(double x) {
volatile float y = static_cast<float>(x);
return y;
}
然后这样使用:
// double x
double y = coerceToFloat(x);
这与仅仅这样做有什么不同吗?:
double y = static_cast<float>(x);
其意图似乎是将双精度降低为单精度。闻起来像是出于极度的偏执狂写的东西。
【问题讨论】:
-
不,没有区别。至于原因,这真的不是我们可以推测的(尤其是在没有更多上下文的情况下)。您必须询问原作者。
-
我不知道代码作者为什么使用
volatile变量。据我所知,该功能与float coerceToFloat(double x) { return static_cast<float>(x); }没有什么不同。 -
我的意思是,给这个操作一个名字是个好习惯。
coerceToFloat的意图肯定比普通的静态转换要明确得多。挥发性的……嗯。也许是为了调试? -
我可能找到了面包屑。 This 表示使用
volatile可以分解浮点运算。也许作者出于同样的原因使用它,它强制编译器在此处截断,而不是优化它并且不吐出中间结果。 -
哦! @NathanOliver ,然后
volatile用于防止可能阻止代码执行缩进的优化!一个惊人的发现!
标签: c++ casting floating-point