使用重复变量编写if-condition的更有效方法

时间:2013-05-03 18:05:38

标签: c performance variables if-statement conditional

我正在寻找一种更有效的方法来编写这些if-conditionals:

a = huge_term >= b ? huge_term : c

(a = huge_term) >= b ? a : a = c

第二个很短,但变量a出现了3次。 我需要将结果存储在变量中。 你会怎么写的?

3 个答案:

答案 0 :(得分:7)

我建议使用中间变量并将逻辑分解为自己的函数。通常,每当我发现这样的条件逻辑时,它会在我的项目中反复出现,因此重构它可以节省时间。

Type processInput(const Type input)
{
  auto result = input;
  if ( input < b )
  {
    result = c;
  }
  return result;
}

int main()
{
  const auto input = huge_term;
  const auto result = processInput(input);
}

答案 1 :(得分:1)

你的第一种方法还可以,但表达式的额外复杂性会使其无法读取,而使用if可能会更好。

第二种“方法”既不可读又效率低下 - 存在冗余计算。不要那样做。

答案 2 :(得分:-1)

最好让变量出现几次而不是一个大表达式。

它可能不会产生效率差异,但从程序组织的角度来看,最好不要重复大块代码。

如果huge_term是编译器可以识别的公共子表达式,其值在两个评估之间不变,则可以通过CSE(公共子表达式消除)消除它。但仅仅因为编译器可以减少它并不意味着它不是一个维护问题。

变量出现的次数几乎不值得关注,特别是如果它有助于减少大型exprssion的重复。也就是说,除非变量是像I / O端口那样的易失性存储器位置。如果对a的赋值是外部可见效果,那么这两个版本的语义不同。