范围
如果编译器遇到 foreach
foreach (element; range) {
它在内部重写类似于以下内容:
for (auto it = range; !it.empty; it.popFront()) {
auto element = it.front;
...
}
任何满足上述接口的对象都称为输入范围,因此是可以迭代的类型:
struct InputRange {
@property bool empty();
@property T front();
void popFront();
}