我刚刚遇到了这行代码:
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
,所以上面的示例也适用于 a 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 个成员)。
您可以使用初始化列表初始化聚合(不仅仅是数组)。
SDL_Color textColor = { 255, 0, 255 };
是相同的
SDL_Color textColor;
textColor.r = 255;
textColor.g = 0;
textColor.b = 255;
textColor.unused = 0;