【发布时间】:2019-01-30 13:11:56
【问题描述】:
我有一个savePotentiometerState(...) - 函数,如果有更改要保存,它返回true,如果什么都不做,则返回false。此外,我知道在通过我的主循环的任何一次通过时,最多有一个电位器可能已经改变(由于它们的读出方式)。
这是在一个非常受时间限制的嵌入式平台上,所以重要(或至少很重要)我不会比我必须更频繁地致电savePotentiometerState。但是,我想出的代码自然看起来很傻,很可能最终会出现在 thedailywtf:
if (!savePotentiometerState(pot1))
if (!savePotentiometerState(pot2))
...
if (!savePotentiometerState(potn));
另一种方法是使用短路评估:
const bool retval = savePotentiometerState(pot1) || savePotentiometerState(pot2) || ... || savePotentiometerState(potn);
我想我什至可以在这里放弃作业。但这也不是很好的风格,因为我滥用了 || 运算符的短路。
各种potn 对象是包含类的成员变量,因此没有明显的方法可以将其写成循环。
我觉得我在这里遗漏了一些明显的东西,所以我的问题是:是否有一种惯用/易于阅读的方式来做到这一点,并且不会牺牲效率?如果重要的话,我使用的是 C++17。
【问题讨论】:
-
为什么你认为这会是短路算子的“荒谬”?这正是它的好处......
-
为什么不拥有
N不同且不同的变量,而不是拥有N元素的数组或向量?然后很容易从头到尾循环并在函数返回true时跳出循环。顺便说一句,它还会使添加或删除对象变得更加容易,因为不需要更改现有代码来反映新的或删除的变量。当然,还可以让你的班级不那么拥挤。 -
@user463035818 我猜是因为我以某种方式将
||视为一个 logical 操作,我在这里直接使用它来控制程序流......但是你可能是对的,也许这是最好的方法。 -
请提供minimal reproducible example。你的问题充满了奇怪的前提,这让你很难理解你真正的问题是什么
-
每个人都在尝试矢量化,你们想回到循环吗?