digitalmars.D.learn - Some array casts
- bearophile (8/8) Jan 21 2015 Currently this is accepted:
- Baz (10/18) Jan 21 2015 This is because of the .sizeof property, for example:
- Baz (2/24) Jan 21 2015 with -m32 of course.
- bearophile (5/8) Jan 21 2015 The sizeof values aren't relevant for D array casts. What matters
- bearophile (9/11) Jan 21 2015 See:
- Douglas Peterson (3/14) Jan 21 2015 i'm sorry if I've lead you on a wrong way.
Currently this is accepted: int[2] m = cast(int[2])[1, 2]; But Kenji suggests that the cast from int[] to int[2][1] should not be accepted. Do you know why? Reference: https://issues.dlang.org/show_bug.cgi?id=7514 Bye and thank you, bearophile
Jan 21 2015
On Wednesday, 21 January 2015 at 14:31:15 UTC, bearophile wrote:Currently this is accepted: int[2] m = cast(int[2])[1, 2]; But Kenji suggests that the cast from int[] to int[2][1] should not be accepted. Do you know why? Reference: https://issues.dlang.org/show_bug.cgi?id=7514 Bye and thank you, bearophileThis is because of the .sizeof property, for example: void main(string[] args) { int[3] m = cast(int[3])[1, 2, 3]; writeln(m.sizeof); writeln([1, 2, 3].sizeof); } outputs 12 / 8 Your previous example is corner case, it's 8/8 in both.
Jan 21 2015
On Wednesday, 21 January 2015 at 14:41:48 UTC, Baz wrote:On Wednesday, 21 January 2015 at 14:31:15 UTC, bearophile wrote:with -m32 of course.Currently this is accepted: int[2] m = cast(int[2])[1, 2]; But Kenji suggests that the cast from int[] to int[2][1] should not be accepted. Do you know why? Reference: https://issues.dlang.org/show_bug.cgi?id=7514 Bye and thank you, bearophileThis is because of the .sizeof property, for example: void main(string[] args) { int[3] m = cast(int[3])[1, 2, 3]; writeln(m.sizeof); writeln([1, 2, 3].sizeof); } outputs 12 / 8 Your previous example is corner case, it's 8/8 in both.
Jan 21 2015
Baz:int[3] m = cast(int[3])[1, 2, 3]; writeln(m.sizeof); writeln([1, 2, 3].sizeof);The sizeof values aren't relevant for D array casts. What matters are the array "contents". Bye, bearophile
Jan 21 2015
The sizeof values aren't relevant for D array casts. What matters are the array "contents".See: void main() { int[5] m = cast(int[5])[1, 2, 3, 4, 5]; assert(m == [1, 2, 3, 4, 5]); pragma(msg, m.sizeof); // 20u pragma(msg, [1, 2, 3, 4, 5].sizeof); // 8u } Bye, bearophile
Jan 21 2015
On Wednesday, 21 January 2015 at 18:08:44 UTC, bearophile wrote:i'm sorry if I've lead you on a wrong way. My bad.The sizeof values aren't relevant for D array casts. What matters are the array "contents".See: void main() { int[5] m = cast(int[5])[1, 2, 3, 4, 5]; assert(m == [1, 2, 3, 4, 5]); pragma(msg, m.sizeof); // 20u pragma(msg, [1, 2, 3, 4, 5].sizeof); // 8u } Bye, bearophile
Jan 21 2015