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,所以上面的示例也适用于 a 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 个成员)。

您可以使用初始化列表初始化聚合(不仅仅是数组)。

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 回答