我刚遇到这行代码:
SDL_Color textColor = { 255, 0, 255 };
这让我想知道为什么它可以被声明为数组。我认为它可能和textColor(255,0,255);
一样,但当我尝试创建自己的课程时,它并没有像那样工作。任何人都可以解释何时使用这种语法?参数在哪里??
答案 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;