Od C ++ 17 można napisać if
blok, który zostanie wykonany dokładnie raz w ten sposób:
#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;
}
}
}
Wiem, że mogę się nad tym zastanawiać i są inne sposoby rozwiązania tego problemu, ale nadal - czy można to jakoś napisać w ten sposób, więc do_once = false
na końcu nie ma potrzeby ?
if (DO_ONCE) {
// Do stuff
}
Myślę o funkcji pomocniczej do_once()
zawierającej static bool do_once
, ale co jeśli chciałbym użyć tej samej funkcji w różnych miejscach? Czy to może być czas i miejsce na spotkanie #define
? Mam nadzieję, że nie.
std::call_once
jest opcją (jest używana do gwintowania, ale nadal działa).
if
warunkach mogą być static
. To sprytne.
if (i == 0)
? To wystarczająco jasne.