的std ::矢量<具有可访问构造函数

时间:2016-12-17 14:29:46

标签: c++ stl iterator

ST ++ g ++ 实现允许我在我的客户端代码中构造一个具有任意地址值的std::vector<T>::iterator类型的迭代器:

int* i_ptr;
std::vector< int >::iterator it(i_ptr);

是标准能力,还是实施的雏形?

它的设计用途?

3 个答案:

答案 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 的指针。