【发布时间】:2012-02-06 03:19:56
【问题描述】:
当我将一个数组变量分配给另一个数组变量时,复制/共享了多少信息?
int[] a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
int[] b = a;
a[0] = 42;
writefln("%s %s", a[0], b[0]); // 42 42
显然,a 和 b 共享相同的有效载荷,因为 42 被打印了两次。
a ~= 10;
writefln("%s %s", a.length, b.length); // 11 10
附加到a 不会改变b,所以长度似乎不是有效载荷的一部分?
b = a;
a ~= 11;
b ~= 42;
writefln("%s %s", a[11], b[11]); // 11 42
符合标准的 D 实现是否也可以打印 42 42? b ~= 42可以覆盖a里面的11吗?
a 和 b 究竟是什么时候相互分离的? D 在后台执行一些 COW 吗?
【问题讨论】:
标签: arrays variable-assignment d sharing deep-copy