自从 C++ 17 版本之后,可以像这样编写一个仅会被执行一次的 if
代码块:
#include <iostream>
int main() {
for (unsigned i = 0; i < 10; ++i) {
if (static bool do_once = true; do_once) { // Enter only once
std::cout << "hello one-shot" << std::endl;
// Possibly much more code
do_once = false;
}
}
}
我知道我可能想太多了,并且还有其他的解决方法,但是 - 是否有可能以某种方式编写这个代码,以便在结尾处不需要 do_once = false
?
if (DO_ONCE) {
// Do stuff
}
我在考虑一个辅助函数do_once()
,其中包含static bool do_once
,但如果我想在不同的地方使用相同的函数怎么办?这是使用#define
的时间和地点吗?我希望不是。
if (i == 0)
呢?这样已经很清楚了。 - Silvano Cerzastd::call_once
是一个选项(用于线程处理,但仍然能完成它的工作)。 - local-ninjaif
条件语句中初始化的变量可能是static
的。这很巧妙。 - HolyBlackCat