我必须保持一个双倍值缓存.使用后,它应该无效.两种选择
一种是添加布尔标志,true当缓存值良好时,使用时将其设置为false,当flag为false时,重新计算并重新填充.
第二个更有趣 - 我可以将它保持为double值并使用NaN作为无效/需要重新计算标志.
double get() const {
if (!isnan(_value)) {
double t = _value;
_value = std::numeric_limits<double>::quiet_NaN;
return t;
}
}
Run Code Online (Sandbox Code Playgroud)
对此有何异议?关于效率的任何想法?
使用布尔值,否则当你的计算结果实际上变成NaN(由于计算)时,你将会遇到一些有趣的问题/错误.如果您依靠NaN作为"我已经使用过该值"的信号,那么在"有效"未使用的NaN的情况下,您将无法区分.
更不用说这种语义过载将导致未来的代码读者(即使是你自己从现在开始的几个月)试图破译那些聪明的用法.;-)
通常,重载变量的含义是一种不好的做法.起初看起来可能很可爱,但它不可避免地会带来更多伤害.
就效率而言 - 我真的建议你先测量,然后再担心优化.我敢打赌,一旦你运行测试,你会发现速度差异远低于CPU温度波动引起的性能噪音.
| 归档时间: |
|
| 查看次数: |
423 次 |
| 最近记录: |