Desde o C ++ 17, é possível escrever um if
bloco que será executado exatamente uma vez assim:
#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;
}
}
}
Eu sei que posso estar pensando demais nisso, e há outras maneiras de resolver isso, mas ainda assim - é possível escrever isso de alguma forma assim, para que não haja necessidade de do_once = false
no final?
if (DO_ONCE) {
// Do stuff
}
Estou pensando em uma função auxiliar do_once()
, contendo o static bool do_once
, mas e se eu quisesse usar a mesma função em lugares diferentes? Pode ser esse o momento e o local para um #define
? Espero que não.
std::call_once
seja uma opção (é usada para segmentar, mas ainda funciona).
if
condição poderiam ser static
. Isso é esperto.
if (i == 0)
? Está claro o suficiente.