确保我们仅一次初始化每个变量

时间:2019-02-23 08:43:24

标签: c++ testing static c++14 llvm

以下是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 

声明为静态吗?

1 个答案:

答案 0 :(得分:1)

这是确保编译器正常工作的测试。它应该传递任何可确认的c ++编译器。

我想这是一项快速的健全性检查,将会有更多的深入测试,可能很难理解为什么它们在错误的编译器上失败。

将变量声明为静态变量,以确保各种形式的静态变量正确初始化,并且初始化程序仅被调用一次。