範圍
如果編譯器遇到 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();
}