根据标准,正如这里所引用的,
第一个
vector<T>::iterator
应该是连续的(对于除了bool
之外的T
),但在所有三个主要的实现中,它都不是,为什么呢?#include <iterator>
#include <vector>
using InputIterator = std::vector<int>::iterator;
static_assert(std::is_same_v<typename std::iterator_traits<InputIterator>::iterator_category, std::random_access_iterator_tag>);
static_assert(std::is_same_v<typename std::iterator_traits<InputIterator>::iterator_category, std::contiguous_iterator_tag>);
第一个
static_assert
成功,但是最新的MSVC、GCC和clang都失败了。
std::iterator_traits
的内容,它指出iterator_category
用于传统迭代器类别,而iterator_concept
用于现代迭代器概念。建议尝试检查iterator_concept
。 - undefinediterator_category
为random_access_iterator_tag
,因此它还没有被更改为contiguous_iterator_tag
。请注意,迭代器类别与contiguous_iterator
概念不同。 - undefinedis_same_v
,所以它不可能同时为真,但我最初预期它既是随机访问迭代器又是连续迭代器,这是不可能的 - 至少在这种方式下测试是不可能的。 - undefined