gpt4 book ai didi

c++ - 确保我们初始化每个变量一次且仅一次

转载 作者:行者123 更新时间:2023-11-30 04:51:20 25 4
gpt4 key购买 nike

下面是来自 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

声明为静态的?

最佳答案

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

我猜它是作为一种快速完整性检查存在的,将会有更深入的测试,这些测试可能更难理解为什么它们在错误的编译器上失败。

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

关于c++ - 确保我们初始化每个变量一次且仅一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54839786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com