const 变量的条件初始化

2023-12-21

以下基本代码是一个相当大的过程的一部分:

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(使用前将#替换为@)

const 变量的条件初始化 的相关文章

随机推荐