D:在foreach中将引用什么(参考文献;部分[0 .. $ / 2 + 1])

时间:2014-04-05 12:48:20

标签: foreach d slice

这两个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
}       

2 个答案:

答案 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

是内存中的连续地址。