digitalmars.D.learn - Append const to array
- Yuxuan Shui (15/15) Sep 20 2016 struct A {
- Jonathan M Davis via Digitalmars-d-learn (8/23) Sep 20 2016 const(A) means that the ulong[] inside is const(ulong[]). When yy is cop...
- Yuxuan Shui (3/33) Sep 20 2016 That makes sense, thanks.
struct A { ulong[] x; } struct B { ulong x; } void main() { B[] b; const(B) xx = B(1); b ~= xx; // Works A[] c; const(A) yy = A([1]); c ~= yy; // Does not } What gives?
Sep 20 2016
On Tuesday, September 20, 2016 22:23:08 Yuxuan Shui via Digitalmars-d-learn wrote:struct A { ulong[] x; } struct B { ulong x; } void main() { B[] b; const(B) xx = B(1); b ~= xx; // Works A[] c; const(A) yy = A([1]); c ~= yy; // Does not } What gives?const(A) means that the ulong[] inside is const(ulong[]). When yy is copied to be appended to c, it goes from const(A) to A, which means that const(ulong[]) would need to be sliced and and set to ulong[], which would violate const, because it would mean that the last element in c could mutate then elements of its x, which would then mutate the elements in yy. - Jonathan M Davis
Sep 20 2016
On Tuesday, 20 September 2016 at 22:38:33 UTC, Jonathan M Davis wrote:On Tuesday, September 20, 2016 22:23:08 Yuxuan Shui via Digitalmars-d-learn wrote:That makes sense, thanks.struct A { ulong[] x; } struct B { ulong x; } void main() { B[] b; const(B) xx = B(1); b ~= xx; // Works A[] c; const(A) yy = A([1]); c ~= yy; // Does not } What gives?const(A) means that the ulong[] inside is const(ulong[]). When yy is copied to be appended to c, it goes from const(A) to A, which means that const(ulong[]) would need to be sliced and and set to ulong[], which would violate const, because it would mean that the last element in c could mutate then elements of its x, which would then mutate the elements in yy. - Jonathan M Davis
Sep 20 2016