Od C ++ 17 można napisać ifblok, 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 = falsena 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_oncejest opcją (jest używana do gwintowania, ale nadal działa).
ifwarunkach mogą być static. To sprytne.
if (i == 0)? To wystarczająco jasne.