以下基本代码是一个相当大的过程的一部分:
int x = foo();
if (x == 0) x = bar();
x
没有在其他地方修改,所以我可以这样做:
const int x = foo() == 0 ? bar() : foo();
But foo()
是一个非常昂贵且复杂的函数,因此由于性能原因以及它可能会生成竞争条件并因此获得不同的值(它可能涉及读取外部资源)这一事实,我不能调用它两次。
我想让代码尽可能可读,并且如果可能的话,尽可能简短。一种选择是:
const int foo_ = foo(), x = foo_ == 0 ? bar() : foo_;
另一方面,我想避免这种时间变量主要是因为foo()
可能依赖于外部资源,因此使用foo_
作为代码其余部分中的缓存值无效。
我正在发布我现在正在使用的解决方案,但我想知道是否有更好的选择(没有或很少有代码混乱,同一范围内没有时间变量,可读性......)。提前致谢!
PS:它至少必须遵循C++11标准,因为它属于跨平台项目。
我知道这可能是基于意见的,但考虑到之前关于简单性(不是混乱的代码)和避免时间变量(不是为了可读性而是为了代码安全)的陈述,我想知道解决这个问题的选项。
如果您乐意使用海湾合作委员会扩展 https://gcc.gnu.org/onlinedocs/gcc/Conditionals.html那么你可以写:
const int x = foo() ?: bar();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)