3

私はちょうどこのコード行に出くわしました:

SDL_Color textColor = { 255, 0, 255 };

なぜ配列のように宣言できるのか不思議に思いました。と同じように言ったのかもしれないと思いましたtextColor(255,0,255);が、自分でクラスを作ってみたところ、うまくいきませんでした。このタイプの構文がいつ使用されるかを誰かが説明できますか?パラメータはどこに行きますか..?

4

3 に答える 3

10

これは、型の集約初期化であり、ほとんどの場合、単純な構造体またはクラスです。例えば、

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};
于 2012-08-23T12:00:57.710 に答える
3

すべてのアグリゲートは中括弧で初期化できます。これにより、各アグリゲートメンバーが一致するアイテムで初期化されます。リストに含まれるアイテムが集約メンバーよりも少ない場合、残りの要素は空のブレースリストからのように初期化されます。

于 2012-08-23T12:00:14.720 に答える
1

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;
于 2012-08-23T12:00:11.340 に答える