以下代码在我的系统上编译良好:
#include <array>
#include <type_traits>
static_assert(std::is_same<std::array<int, 5>::iterator,
std::array<int, 7>::iterator>::value, ":(");
标准是否保证了这种行为?迭代器类型是否与数组大小无关?
如果有保证,有没有办法从元素类型中抽象出来,忽略大小?
template<typename T, size_t n>
void foobar(std::array<T, n>::iterator it)
也就是说,有没有什么方法可以在不提及 size 的情况下编写上述特定于数组的代码n
?
请注意T*
,即使在发布模式下迭代器可能是T*
.