由于 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
的时间和地点吗?我希望不是。
原文由 nada 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用
std::exchange
:您可以缩短反转真值:
但是,如果您经常使用它,请不要花哨并创建一个包装器:
并像这样使用它:
该变量不应该在条件之外被引用,所以这个名字并没有给我们带来太多好处。从其他语言(如 Python )中汲取灵感,这些语言赋予
_
标识符以特殊含义,我们可以这样写:进一步改进:利用 BSS 部分(@Deduplicator),避免在我们已经运行时写入内存(@ShadowRanger),如果您要进行多次测试(例如,就像问题中一样),请给出分支预测提示: