[vs 2005]vector双参数构造流程

来源:互联网 发布:游戏多线程优化 编辑:程序博客网 时间:2024/06/05 01:56

源代码:

#include <vector>using namespace std;int main(){vector<int> vec(20, 10);return 1;}

分析:

vector实现中有两个函数,一个是vector(size_type _Count, const _Ty& _Val) ,一个是模板函数vector(_Iter _First, _Iter _Last) 。该例中,它将调用模板函数,因为20和10都是int类型,而size_type是unsigned int,故调用模板函数。

// vector 497template<class _Iter>vector(_Iter _First, _Iter _Last) : _Mybase(){// construct from [_First, _Last)_Construct(_First, _Last, _Iter_cat(_First));}

_Iter_cat类型推导:_Iter_cat<int>  -->  iterator_traits<int> --> _Int_iterator_tag。

// vector 511template<class _Iter>void _Construct(_Iter _Count, _Iter _Val, _Int_iterator_tag){// initialize with _Count * _Valsize_type _Size = (size_type)_Count;_Construct_n(_Size, (_Ty)_Val);}

后略。。。

 

第二种情况:

#include <vector>using namespace std;int main(){vector<int> vec((size_t)20, 10);return 1;}

分析,这个构造函数将不再调用模板函数:

// vector 473vector(size_type _Count, const _Ty& _Val) : _Mybase(){// construct from _Count * _Val_Construct_n(_Count, _Val);}
原创粉丝点击