Dal momento che C ++ 17 è possibile scrivere un if
blocco che verrà eseguito esattamente una volta in questo modo:
#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;
}
}
}
So che potrei pensare troppo a questo, e ci sono altri modi per risolverlo, ma ancora - è possibile scrivere questo in qualche modo in questo modo, quindi alla fine non è necessario do_once = false
?
if (DO_ONCE) {
// Do stuff
}
Sto pensando a una funzione di supporto do_once()
, contenente il static bool do_once
, ma se volessi usare la stessa funzione in luoghi diversi? Potrebbe essere questo il momento e il luogo per un #define
? Spero di no.
std::call_once
è un'opzione (viene utilizzata per il threading, ma fa comunque il suo lavoro).
if
potrebbero essere variabili inizializzate in una condizione static
. È intelligente.
if (i == 0)
? È abbastanza chiaro.