将值复制到const中以进行优化

Copy value into consts for optimization

本文关键字:优化 const 复制      更新时间:2023-10-16

假设您的第一个目标是执行速度,然后是代码清洁度,最后是资源使用。

如果在算法的某一点上,一个变量(例如double类型)不会再改变了(但你仍然要读它很多次),你会把它复制成一个常量值吗?

如果你想让你的代码更清晰,尽一切办法,将你的值复制到const double const_value = calculated_value;,但是编译器非常擅长跟踪依赖关系,并且(假设你使用的是一个现代的,相当有能力的编译器)代码不太可能因为你这样做而更快或更好。有一个很小的机会,编译器相信你的话,你想要第二个变量,因此做一个副本,并使代码变慢,因为。

与往常一样,如果性能对应用程序很重要,请在&在"对特定代码进行比较基准测试"之后,因为在互联网上阅读页面或询问SO与对代码进行基准测试是不一样的。

仅仅将非常量变量复制为常量变量并不会使代码更简洁,因为不是一个变量而是两个变量。更有趣的是将非常数移出作用域。这样,我们只有常量版本的变量可见,并且编译器可以防止我们错误地更改其值。

Herb Sutter描述了如何使用c++ 11 lambdas: const变量的复杂初始化。

const int i = [&]{
  int i = some_default_value;
  if(someConditionIstrue)
  {
    Do some operations and calculate the value of i;
    i = some calculated value;
  }
  return i;
} ();

(我不解释执行速度目标,因为它已经由Mats Petersson完成了)。

为了更好的代码可读性,您可以在变量不再被更改的地方创建一个const引用,并从该点开始使用const引用。

double value_init;
// Some code that generates value_init...
const double& value = value_init;
// Use value from now on in your algorithm