上课时:
class X
{
int data_;
void f()
{
//shall I cache var data_? by doing
int cached = data_
//and instaed of this:
if (data_ >= 0 && data_ < 1000 || data_ < 0 && data_ > -1000)//first version
{
//do something
}
else
{
//do somegthing else
}
// have this:
if (cashed >= 0 && cashed < 1000 || cashed < 0 && cashed > -1000)//second version
// in my opinion this is bad code
{
//do something
}
else
{
//do somegthing else
}
}
};
请参阅代码中的注释 我问这个问题是因为我大学的同谋说这种代码(第1行)只是一个糟糕的代码。我认为他说的是垃圾,但我对你对这个问题的看法非常感兴趣 谢谢。
答案 0 :(得分:1)
*缓存
除非你的data_变量在执行过程中发生变化,否则这两个代码段之间没有任何区别。
答案 1 :(得分:1)
除非已经太慢,否则不要进行优化:编写最清晰,最简单的代码,测量它,如果速度太慢,请使用工具发现(而不是猜测)哪个部分最慢。如果可能,在部署缓存之前使用更好的算法&amp;其他次要的优化。在任何情况下,一旦你优化了那个部分,再次测量它,如果它仍然太慢,重复。
话虽如此,@ Zhais是正确的。两个代码片段没有功能差异。
答案 2 :(得分:1)
这种优化称为过早优化。在被证明是瓶颈之前,你不应该做那样的优化。
在第一种情况下,变量实际上用作this->data_
,但您无法确定,因为编译器可能会自行缓存它。