私は C++11 の POD について調べてきましたが、私が読んだいくつかの場所では、静的初期化をサポートする POD について何か述べています。例えば:
POD の考え方は、基本的に 2 つの異なるプロパティをキャプチャすることです
。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
では、静的初期化とは正確には何であり、自明なクラスとどのように関係しているのでしょうか? 例は素晴らしいでしょう。