我可以用代码进行结构初始化:

struct struct_type_id struct_name_id = { value1, value2, value3 };

但不能:
struct struct_type_id struct_name_id;
struct_name_id = { value1, value2, value3 };

为什么我可以用前者来做到这一点,而不能用gcc,g++,vc2008,vc6来解决?换句话说,为什么c/c++编程语言不支持这种语法?

谢谢。

最佳答案

第一条语句创建一个初始化为给定值的变量,即这些值内置在内存中,并直接存储在该变量地址中的可执行程序中(对于全局变量)或准备好进行内存复制(对于堆栈变量)。

第二个块的第二个语句非常不同。尽管看起来很相似,但这是一个assign表达式。这意味着equals运算符的RHS是一个被求值的表达式(与=的LHS中的值无关),然后传递给=运算符。没有适当的上下文,{...}没有任何意义。

在C99中,您可以执行以下操作:

struct_name_id = (struct struct_type_id){ value1, value2, value3 };

现在,equals运算符的RHS是一个有效的表达式,因为有适当的上下文供编译器知道{...}中的内容。

在C++ 11中,语法为:
struct_name_id = struct_type_id{ value1, value2, value3 };

10-06 15:08