考虑这段代码:
std::vector<char>::size_type size = static_cast<std::vector<char>::size_type>(std::numeric_limits<std::vector<char>::difference_type>::max()) + 1;
std::vector<char> v(size);
std::vector<char>::difference_type diff = std::distance(v.begin(), v.end());
其中 size_type 与 size_t (unsigned int) 相同,difference_type 与 ptrdiff_t 相同(签名整数)。
如果 vector 的大小大于difference_type的限制,std::distance函数会返回一个负值吗?
最佳答案
对于随机访问迭代器类型,distance(a,b)
被定义为 b-a
。随机访问迭代器的减法有一个前提条件:
pre: there exists a value
n
of typedifference_type
such thata + n == b
.
因此,如果 vector 大小对于 difference_type
而言太大,那么您将打破该先决条件,给出未定义的行为(可能是负面结果;也可能是其他原因)。
关于c++ - 当 v 大于 INT_MAX 时,std::distance(v.begin(), v.end()) 的结果是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26403648/