我刚刚发现,在某个时候,C++11草案中有
std::pair
的std::begin
/std::end
重载,允许将一对迭代器作为适用于范围基于for循环的范围(N3126,第20.3.5.5节),但此后已被删除。有人知道为什么会被删除吗?我认为这次删除非常不幸,因为似乎没有其他方法可以将一对迭代器视为范围。确实:- 范围基于for循环的查找规则表明,begin/end在1)范围对象的成员函数中查找2)在“关联命名空间”中查找自由函数
std::pair
没有begin/end成员函数std::pair<T,U>
的唯一关联命名空间通常是命名空间std- 我们不允许自己重载
std::begin
/std::end
以用于std::pair
- 我们不能为
std::pair
专门化std::begin
/std::end
(因为专门化必须是部分的,对于函数来说是不允许的)