無名構造体、無名共用体

今頃存在を知りました。C++プログラマ大失格だよもん。


どちらも、メンバ変数が宣言と同じスコープになるという代物。


void func()
{
// 無名構造体
struct {
int a;
int b;
};

a = 0; // 関数のスコープでアクセス出来る!
b = 1;
}

関数は宣言出来ないそうで。


行列クラスに使ってみた。


class Matrix2 {
union { // 無名共用体
struct { float a, b, c, d; }
struct { float p, q, r, s; }
float m[2][2];
}
};
こうすると、abcdとpqrsはクラスのスコープで使える。



Matrix2& Matrix2::operator *= (const Matrix2& x)
{
a = a*x.p + b*x.r;
b = a*x.q + b*x.s;
c = c*x.p + d*x.r;
d = c*x.q + d*x.s;
return *this;
}
おお、数学の教科書みたいに書けますね!
それだけです。