std::vector<T>::iterator
类型的迭代器:
int* i_ptr;
std::vector< int >::iterator it(i_ptr);
是标准能力,还是实施的雏形?
它的设计用途?
答案 0 :(得分:2)
这只是一个实现细节,甚至不能保证按标准编译。它也没有在gcc的实现定义行为中列出,也没有在GNU C ++扩展中列出,所以你的代码片段可能会在任何版本更改时中断。
在代码中不要依赖于“工作”。
答案 1 :(得分:1)
在Visual Studio 2017中,RC无法编译:
main.cpp(8): error C2664: 'std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>>::
_Vector_iterator(std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>> &&)':
cannot convert argument 1 from 'int *' to
'const std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>> &'
答案 2 :(得分:1)
我不认为这是一种标准能力。只是一个实现定义的功能。
在许多实现中, vector 迭代器只是简单的指针。所以如果你有一个向量&lt; T&gt; 然后迭代器只是一个指向 T 类型的指针。它是为了一些优化目的而完成的。
在这样的实现中,可以创建从指针初始化的迭代器,以键入 T ,因为您可以初始化指针以通过此类型的另一个指针键入 T 。< / p>
但它是实现定义的,当然,如果迭代器被定义为指向 T 的指针。