gpt4 book ai didi

c++ - C/C++编程语言的结构初始化?

转载 作者:IT老高 更新时间:2023-10-28 23:10:45 25 4
gpt4 key购买 nike

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

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++ 编程语言不支持这种语法?

谢谢。

最佳答案

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

第二 block 的第二条语句很不一样。虽然看起来很相似,但它是一个赋值表达式。这意味着等于运算符的 RHS 是一个被计算的表达式(独立于 = 的 LHS 中的内容),然后传递给 = 运算符。没有适当的上下文,{...} 没有任何意义。

在 C99 中,您可以这样做:

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

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

在 C++11 中,语法为:

struct_name_id = struct_type_id{ value1, value2, value3 };

关于c++ - C/C++编程语言的结构初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1705147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com