私はちょうどこのコード行に出くわしました:
SDL_Color textColor = { 255, 0, 255 };
なぜ配列のように宣言できるのか不思議に思いました。と同じように言ったのかもしれないと思いましたtextColor(255,0,255);
が、自分でクラスを作ってみたところ、うまくいきませんでした。このタイプの構文がいつ使用されるかを誰かが説明できますか?パラメータはどこに行きますか..?
これは、型の集約初期化であり、ほとんどの場合、単純な構造体またはクラスです。例えば、
struct Foo
{
int i,j;
double x,y;
};
int main()
{
Foo f = {1,2, 3.,4.};
}
に関して混乱があるためstructs
、上記の例は、でも機能することに注意してください。この場合は、 :class
と同じです。struct
class Foo
{
public:
int i,j;
double x,y;
};
C ++ 11では、このタイプの初期化は、特定の条件下で非集約タイプに拡張されます。
例えば
std::vector<int> v = {1,2,3,4,5};
すべてのアグリゲートは中括弧で初期化できます。これにより、各アグリゲートメンバーが一致するアイテムで初期化されます。リストに含まれるアイテムが集約メンバーよりも少ない場合、残りの要素は空のブレースリストからのように初期化されます。
SDL_Color
は集合体です(struct
この場合、4つのメンバーを持つa)。
イニシャライザリストを使用して、(配列だけでなく)アグリゲートを初期化できます。
SDL_Color textColor = { 255, 0, 255 };
と同じです
SDL_Color textColor;
textColor.r = 255;
textColor.g = 0;
textColor.b = 255;
textColor.unused = 0;