![现代C++编程实战:132个核心技巧示例(原书第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/258/50418258/b_50418258.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.9.3 工作原理
有了这样的实现,前面显示的基于range的for循环将按预期编译和执行。在执行参数依赖查找时,编译器将识别我们编写的两个函数begin()和end()(它们接受dummy_array的引用),因此它生成的代码是有效的。
在前面的例子中,我们定义了一个迭代器类模板和两个模板别名,分别称为dummy_array_iterator和dummy_array_const_iterator。对于这两种类型的迭代器,begin()和end()函数都有重载。
考虑到容器可以在基于range的for循环中使用常量和非常量实例,这是很有必要的:
![](https://epubservercos.yuewen.com/4AD12D/29686922007544106/epubprivate/OEBPS/Images/54_02.jpg?sign=1739698958-hqa1GHYGO07YCJiU3hSvv8c1tZ5tADea-0-cb9ed4582075ac50a6e3064f2a8838aa)
简单range类使用基于range的for循环的另一种方法是提供begin()和end()成员函数,一般来说,只有当你拥有并能够修改源代码时,这才有意义。另外,本节中显示的解决方案在所有情况下都有效,应该优先于其他备选方案。