Seit C ++ 17 kann man einen if
Block schreiben , der genau einmal so ausgeführt wird:
#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;
}
}
}
Ich weiß, dass ich das vielleicht überdenke, und es gibt andere Möglichkeiten, dies zu lösen, aber dennoch - ist es möglich, dies irgendwie so zu schreiben, so dass es do_once = false
am Ende nicht nötig ist ?
if (DO_ONCE) {
// Do stuff
}
Ich denke an eine Hilfsfunktion, do_once()
, die die enthält static bool do_once
, aber was ist, wenn ich dieselbe Funktion an verschiedenen Orten verwenden möchte? Könnte dies die Zeit und der Ort für eine sein #define
? Ich hoffe nicht.
std::call_once
ist es eine Option (es wird zum Einfädeln verwendet, macht aber trotzdem seinen Job).
if
Bedingungen initialisiert wurden , sein könnten static
. Das ist schlau.
if (i == 0)
? Es ist klar genug.