我正在寻找一种更有效的方法来编写这些if-conditionals:
a = huge_term >= b ? huge_term : c
或
(a = huge_term) >= b ? a : a = c
第二个很短,但变量a
出现了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
的赋值是外部可见效果,那么这两个版本的语义不同。