POD

めんどくさいことは後回しにする癖があるのですが、今日、仕事で他の人からそれを指摘されてしまいました。自覚はあって、直さなくちゃと思っていたことだったのですが、他人からあらためて指摘されるとハッとします。めんどくさいものこそ先にやる、あるいは見通しをつけておかないと後で苦労します。うん、気をつけよう。
POD、Plan Old Dataの定義で悩みました。このコンパイラでは通るけど、果たしてこれは規格で許されているもなのか、それともコンパイラ依存なのか。割とあいまいな知識で作っているので、実はコンパイラ依存でしたってことが時々あります。逆に、コンパイラ依存だと思っていたものが実は数年前から標準になっていますなんてことも。で、POD。

intやfloatがPODなのは感覚的によくわかるとして、構造体の場合は、

  • 非静的なPODタイプのメンバ変数がないこと
  • 非静的な参照のメンバ変数がないこと
  • ユーザ定義のコンストラクタ、デストラクタ、代入演算子がないこと
  • 非静的なprivate, protectedメンバ変数がないこと
  • 仮想関数がないこと
  • PODではない構造体を継承していないこと

を満たしている必要があるっぽいです。厳密には更に条件があるみたいだけど、きっとその辺はコンパイルエラーが出るはず。メンバ関数を持つだけでも駄目だったかもしれないと思っていたので助かりました。