POD 表示没有构造函数和析构函数的原始数据类型。
我很好奇,编译器如何处理 POD 静态局部变量的惰性初始化。如果函数要在多线程应用程序中的紧密循环内运行,那么惰性初始化意味着什么?这些是可能的选择。哪个更好?
void foo_1() {
static const int v[4] = {1, 2, 3, 4};
}
void foo_2() {
const int v[4] = {1, 2, 3, 4};
}
这个怎么样?没有惰性初始化,但语法略显笨拙?
struct Bar
{
static const int v[4];
void foo_3()
{
// do something
}
};
const int My::v[4] = {1, 2, 3, 4};
最佳答案
当用常量数据初始化静态变量时,我熟悉的所有编译器都会在编译时初始化值,因此没有任何运行时开销。
如果变量不是静态的,则必须在每次函数调用时分配它,并且必须将值复制到其中。我想如果它是一个 const 变量,编译器可能会将其优化为 static,但 const-ness 可以被丢弃。
关于c++ - 如何初始化静态本地 POD 常量?懒还是不懒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4513350/