C ++ 17以降if
では、次のように1回だけ実行されるブロックを記述できます。
#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
ませんか?私は望みません。
std::call_once
オプションです(スレッド化に使用されますが、それでも機能します)。
if
条件で初期化された変数がである可能性があることは、私には起こりませんでしたstatic
。それは賢いです。
if (i == 0)
ですか?それは十分に明確です。