Ниже приведен тест из библиотеки обработки исключений LLVM libcxxabi (которая, кстати, использует библиотеку LLVM для размотки стека libunwind):
// libcxxabi\test\test_guard.pass.cpp
...
// Ensure that we initialize each variable once and only once.
namespace test1 {
static int run_count = 0;
int increment() {
++run_count;
return 0;
}
void helper() {
static int a = increment();
((void)a);
}
void test() {
static int a = increment(); ((void)a);
assert(run_count == 1);
static int b = increment(); ((void)b);
assert(run_count == 2);
helper();
assert(run_count == 3);
helper();
assert(run_count == 3);
}
}
...
int main()
{
test1::test();
}
Возможно, я упускаю что-то очевидное, но я не уверен, чтоИдея этого теста (что он тестирует и как).У вас есть идеи?
Почему эти три переменные
static int run_count
static int a (in test(), not in helper())
static int b
объявлены статическими?