Desde C ++ 17 se puede escribir un if
bloque que se ejecutará exactamente una vez como esta:
#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;
}
}
}
Sé que podría estar pensando demasiado en esto, y hay otras formas de resolver esto, pero aún así, ¿es posible escribir esto de alguna manera como esta, por lo que no hay necesidad del do_once = false
final?
if (DO_ONCE) {
// Do stuff
}
Estoy pensando en una función auxiliar do_once()
, que contiene el static bool do_once
, pero ¿qué pasa si quisiera usar esa misma función en diferentes lugares? ¿Podría ser este el momento y el lugar para un #define
? Espero que no.
std::call_once
es una opción (se usa para enhebrar, pero aún así funciona).
if
condición podrían ser static
. Eso es inteligente.
if (i == 0)
? Está lo suficientemente claro.