如果没有类型转换,为什么复合文字赋值不起作用

我对C中的文字有疑问。

int a; //a is an integer that is assigned an integer literal 414 a = 414; float b; //b is a float that is assigned a float literal of 3.14 b = 3.14; struct point { int x,y; }; struct point b; //{5,6} is a compound literal that is assigned to a struture. b = {5,6}; //doesn't work. b = (struct point){5,6}; //works. 

没有类型转换似乎没有用? 这是什么原因?

(struct point){5,6}作为一个整体是复合文字。

C11§6.5.2.5 复合文字

后缀表达式由带括号的类型名称后跟括号括起的初始值设定项列表组成,是一个复合文字。