我可以用代码进行结构初始化:
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 };