【发布时间】:2015-06-21 16:18:41
【问题描述】:
我有这个代码
#include <vector>
#include <iostream>
int main(int argc, char* argv[])
{
std::vector<int> v1,v2;
std::cout << std::distance(v1.begin(),v2.begin());
return 0;
}
它有一个错误,因为比较两个不同向量的迭代器没有意义。
我在第 815 页的 24.4.4 迭代器操作中查看了 N3376:
template<class InputIterator> typename iterator_traits<InputIterator>::difference_type distance(InputIterator first, InputIterator last);要求:如果
InputIterator满足随机访问迭代器的要求,则last应可从first或first访问 可从last访问;否则,last应该可以从first.
现在我认为 Requires 没有满足。
在这种情况下,标准状态应该是什么?
【问题讨论】:
-
如果标准不允许,很可能会导致未定义的行为,因为比较不同向量的迭代器有点不合逻辑
-
一般来说,违反要求会产生未定义的行为。
标签: c++ iterator standards language-lawyer c++-standard-library