【发布时间】:2021-12-12 19:25:23
【问题描述】:
有了这个定义
struct A {
int x;
};
为什么
struct A a = {0};
有效的语法,而
struct A a;
a = {0};
产生错误“'{'标记之前的预期表达式”?
如果我将该行替换为
a = (struct A){0};
那么一切都很好,所以分配给结构不是问题。
【问题讨论】:
-
吹毛求疵,这不是演员表。这是compound literal。
-
我手头没有相应的标准,但一个是初始化语法,另一个需要是“赋值语法”,它没有为结构声明。我想编译器将后者转换为“使用初始化语法构造类型 A 的变量,然后将其复制到 a”,尽管我不能肯定地说。
-
@RefugnicEternium:赋值的语法对于结构和其他对象是一样的。
a = {0};不起作用,因为{0}不表示结构值,而不是因为无法分配结构。 -
@EricPostpischil 我的意思是,您只能将(相同类型的)结构分配给结构,但不能分配初始化列表。如果我未能正确表达自己,我深表歉意。