Depuis C ++ 17, on peut écrire un if
bloc qui sera exécuté exactement une fois comme ceci:
#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;
}
}
}
Je sais que je réfléchis peut-être trop à cela, et il y a d'autres façons de résoudre cela, mais quand même - est-il possible d'écrire ceci d'une manière ou d'une autre comme ça, donc il n'y a pas besoin de do_once = false
la fin?
if (DO_ONCE) {
// Do stuff
}
Je pense à une fonction d'assistance do_once()
, contenant le static bool do_once
, mais que faire si je voulais utiliser cette même fonction à différents endroits? Serait-ce le moment et l'endroit pour un #define
? J'espère que non.
std::call_once
est peut - être une option (elle est utilisée pour le filetage, mais fait toujours son travail)
if
condition pouvaient l'être static
. C'est malin.
if (i == 0)
? C'est assez clair.