这两个foreach循环将迭代的索引是什么:
struct Section{}
Section[] sections;
// assuming we have 10 sections
foreach(ref s; sections[0..$/2+1]) {
// do something
}
foreach_reverse(ref s; sections[$/2..$])
{
// do something
}
答案 0 :(得分:3)
第一个将迭代0-sections.length/2+1=6
(不包括),第二个将迭代10-5
索引中的$
指的是数组的长度
并且array[a..b]
表示法扩展为array.opSlice(a,b)
,返回数组的部分视图
答案 1 :(得分:1)
在D中,空结构的大小为1.基本原理与C ++相同:请参阅here了解相关问题和基本原理。因此,您的数组将包含虚拟的1字节元素。
让我们检查一下这种行为:
import std.stdio;
struct Section{}
Section[] sections = new Section [10];
void main () {
foreach(ref s; sections[0..$/2+1]) {
writeln (&s);
}
}
对我来说,这会打印:
42208C
42208D
42208E
42208F
422090
422091
是内存中的连续地址。