Data)とは、C言語のデータと互換を持つデータ構造のことです。memcpyでデータをコピーできたりするものですが、それは本質的ではなく、とにかくPODの一番の意味はC言語のデータとbitレベルで完全に互換を持つということです。C++とC言語をまたぐプログラムがある場合、受け渡されるデータはPODでなければいけません。会話中での出現例でいうと「あれ、ちゃんとPODで作っといてよ!」という具合に使います。PODとは具体的にはどういうデータ構造でしょうか。C互換データ=PODは、複雑なクラスレイアウトや、構築、コピー、ムーブなどのユーザ定義のセマンティクスを配慮することなく、”単なるデータ”として利用できるオブジェクトである。type)であるこの2つの定義を満たせば、それは紛れもないPOD型です。簡単ですね!それぞれの定義をさらに掘り下げます。標準レイアウト型virtual関数を持たないvirtual継承をしていない参照メンバを持たない非staticメンバに対して複数のアクセス指定子を持たない(重要!)標準レイアウトでない型を継承していない標準レイアウトでない非staticメンバを持たない継承していてもいいが非staticメンバを持つクラスは継承ツリーの中で1つだけしかない4番目の項目に注目してください。クラスの不定なメモリレイアウトでも触れたとおり、複数のアクセス指定子でメンバを定義してある場合、標準レイアウトの保証はなくなります。トリビアル型トリビアルなデフォルトコンストラクタを持つトリビアルなコピー動作およびムーブ動作をする散々登場しているこの「トリビアルな○○」ってなんやねん!と、あなたは言うでしょう。トリビアルなデフォルトコンストラクタを持つ、トリビアルなコピー動作、ムーブ動作をするとは、大雑把に言うとコンパイラ定義のこれらの動作をするということです。コピーコンストラクタをユーザーが定義したら、それはもうトリビアルな型ではありません。引数無しコンストラクタをユーザーが定義したら、コンパイラ定義のデフォルトコンストラクタが無くなるのでこれもトリビアルな型ではありません。さあ、これで自分の書いたクラスがPODかどうか判断できるようになりました。こんなことは忘れてもいいのです。あるクラスがPODかどうか、本当に知りたいのならstd::is_podを使いましょう。std::endl;}}(コンパイラベンダーの実装にバグが無い限り)正確にPODの判定をしてくれます。小難しいことぁいいんだよ!という人へ。float...etc)しかメンバに持ってないとりあえず、これを抑えておけば大概はPODです。それでもPODじゃないデータ構造を定義してしまったら、逆にすごくね?と思うようにすると良いでしょう。blue_;};これもPOD。v;}};あと、おまけですがPODじゃない型のstaticメンバを持っていてもそのクラスのPOD性には影響ありません。