使用大括号(语法)进行C ++对象初始化

时间:2012-08-23 11:56:38

标签: c++ syntax

我刚遇到这行代码:

SDL_Color textColor = { 255, 0, 255 };

这让我想知道为什么它可以被声明为数组。我认为它可能和textColor(255,0,255);一样,但当我尝试创建自己的课程时,它并没有像那样工作。任何人都可以解释何时使用这种语法?参数在哪里??

3 个答案:

答案 0 :(得分:10)

它是类型的aggregate initialization,很可能是一个简单的结构或类。例如,

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中,这种初始化在某些条件下是extended to non-aggregate types

例如

std::vector<int> v = {1,2,3,4,5};

答案 1 :(得分:3)

所有聚合都可以进行大括号初始化,使用匹配项初始化每个聚合成员。如果列表包含的项目少于聚合成员,则剩余的元素将从空括号列表中初始化。

答案 2 :(得分: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;