现代C++编程实战:132个核心技巧示例(原书第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.9.3 工作原理

有了这样的实现,前面显示的基于range的for循环将按预期编译和执行。在执行参数依赖查找时,编译器将识别我们编写的两个函数begin()和end()(它们接受dummy_array的引用),因此它生成的代码是有效的。

在前面的例子中,我们定义了一个迭代器类模板和两个模板别名,分别称为dummy_array_iterator和dummy_array_const_iterator。对于这两种类型的迭代器,begin()和end()函数都有重载。

考虑到容器可以在基于range的for循环中使用常量和非常量实例,这是很有必要的:

简单range类使用基于range的for循环的另一种方法是提供begin()和end()成员函数,一般来说,只有当你拥有并能够修改源代码时,这才有意义。另外,本节中显示的解决方案在所有情况下都有效,应该优先于其他备选方案。