POD型の初期化
参考サイト C++における構造体の初期化 | 株式会社きじねこ
POD(Plain Old Data)型の初期化には集成体(aggregate)用の{}による初期化とは別に値初期化というものが使えるらしい。
以下VC++2005 Express Editionの実行結果と共に。
#include <vector> #include <iostream> // POD型 struct A{ int a; double b; }; int main() { A a = {}; // POD型はaggregate(集成体)なので{}で初期化できる std::cout << a.a << "\t" << a.b << "\n"; // 0 0 A aa[1] = {}; // aggregateの配列はaggregateなので{}で初期化できる std::cout << aa[0].a << "\t" << aa[0].b << "\n"; // 0 0 A *pa = new A; // 初期化されない std::cout << pa->a << "\t" << pa->b << "\n"; // 不定値 delete pa; pa = new A(); // 値初期化 std::cout << pa->a << "\t" << pa->b << "\n"; // 0 0 delete pa; A *paa = new A[1]; // 初期化されない std::cout << paa[0].a << "\t" << paa[0].b << "\n"; // 不定値 delete[] paa; paa = new A[1](); // 動的配列も値初期化可能 std::cout << paa[0].a << "\t" << paa[0].b << "\n"; // 0 0 delete[] paa; std::vector<A> va(1); // vectorもデフォルトで値初期化を使用 std::cout << va.back().a << "\t" << va.back().b << "\n"; // 0 0 return 0; }