我一直在阅读 C++11 中的 POD,并且我读过的几个地方都谈到了支持静态初始化的 POD。例如:
POD 的想法基本上是捕获两个不同的属性:
1.它支持静态初始化,以及
2. 在 C++ 中编译 POD 为您提供与在 C 中编译的结构相同的内存布局。
(只有粗体部分是相关的)
可以静态初始化平凡的类型。
显然我不明白什么是静态初始化。我认为创建全局变量是静态初始化的一个示例,但我可以执行以下操作,但Foo
不是 POD:
#include <type_traits>
#include <iostream>
struct Foo {
Foo() : x(0), y(0) {}
int x;
int y;
};
struct Bar {
Bar() = default;
int x;
int y;
};
// Apparently the following two lines are not "static initialization" because
// Foo is non-POD yet we can still do this:
Foo f;
Bar b;
int main()
{
if (std::is_pod<Foo>::value) std::cout << "Foo is a POD" << std::endl;
else std::cout << "Foo is *not* a POD" << std::endl;
if (std::is_pod<Bar>::value) std::cout << "Bar is a POD" << std::endl;
else std::cout << "Bar is *not* a POD" << std::endl;
}
输出:
Foo is *not* a POD
Bar is a POD
那么静态初始化到底是什么,它与普通类有什么关系呢?例子会很棒。