【发布时间】:2019-10-25 18:29:29
【问题描述】:
对于标量值,赋值运算符似乎将右侧的值复制到左侧。这对复合数据类型有何作用?例如,如果我有一个嵌套结构
struct inner {
int b;
};
struct outer {
struct inner a;
};
int main() {
struct outer s1 = { .a = {.b=1}};
struct outer s2 = s1;
}
- 赋值是否递归地深度复制值?
- 将结构传递给函数时会发生同样的情况吗?
通过实验看起来确实如此,但是任何人都可以指出行为规范吗?
【问题讨论】:
-
我不会把你正在做的事情称为“深拷贝”。我会将该术语保留为包含指向也需要复制的事物的指针的数据结构,而简单的赋值不会这样做。
-
请注意,
struct outer s2 = s1;不是赋值,而是初始化。 -
@KamilCuk:正确。但是,在复制方面不等效吗?
-
@KamilCuk 这在 C 中并不完全相关,因为我们有 6.7.9 初始化§11:“与简单赋值相同的类型约束和转换适用”。 C++ 完全是另一回事。
标签: c struct assignment-operator