Начиная с C ++ 17, можно написать if
блок, который будет выполняться точно так же, как это:
#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;
}
}
}
Я знаю, что мог бы обдумать это, и есть другие способы решить это, но все же - возможно ли написать это как-то так, так что do_once = false
в конце нет необходимости ?
if (DO_ONCE) {
// Do stuff
}
Я думаю, вспомогательная функция, do_once()
содержащая static bool do_once
, но что, если я хотел бы использовать эту же функцию в разных местах? Может ли это быть время и место для #define
? Надеюсь нет.
std::call_once
это вариант (он используется для многопоточности, но все еще делает свою работу).
if
условиях, могут быть static
. Это умно.
if (i == 0)
? Это достаточно ясно.