STL代码typedef类型名value_type,size_type等如何工作



在某些 STL 类中,您可以找到这样的代码(取自向量标头):

        // TEMPLATE CLASS _Vector_val
template<class _Val_types>
    class _Vector_val
        : public _Container_base
    {   // base class for vector to hold data
public:
    typedef _Vector_val<_Val_types> _Myt;
    typedef typename _Val_types::value_type value_type;
    typedef typename _Val_types::size_type size_type;
    typedef typename _Val_types::difference_type difference_type;
    typedef typename _Val_types::pointer pointer;
    typedef typename _Val_types::const_pointer const_pointer;
    typedef typename _Val_types::reference reference;
    typedef typename _Val_types::const_reference const_reference;
    typedef _Vector_iterator<_Myt> iterator;
    typedef _Vector_const_iterator<_Myt> const_iterator;
    _Vector_val()
        {   // initialize values
        _Myfirst = pointer();
        _Mylast = pointer();
        _Myend = pointer();
        }
    pointer _Myfirst;   // pointer to beginning of array
    pointer _Mylast;    // pointer to current end of sequence
    pointer _Myend; // pointer to end of array
    };

我不明白(也不知道如何有效地谷歌搜索)是这些代码行是如何工作的以及它们在做什么:

typedef typename _Val_types::value_type value_type;

例如,为什么value_type显然在_Val_types命名空间中?

另外,为什么这里似乎有一个函数调用? _Myfirst = pointer();

希望有人可以解释这是如何工作的,或者将我引导到一些解释它的相关网站。

多谢!

_Val_types不是

命名空间名称,它是实例化class _Vector_val的任何类型。不允许将命名空间名称用作模板参数。

typedef typename _Val_types::value_type value_type;

在上行中,您将创建一个名为 value_type 的类型,该类型是嵌套类型的别名,也称为在_Val_types类型中定义的value_typetypename关键字的原因是,当您引用依赖类型(value_type取决于_Val_types的类型)时,它是必需的,有关更多详细信息,请参阅此综合答案。

_Myfirst = pointer();

上面的行是默认构造pointer并将该值分配给_Myfirst。如果pointer是一个平凡的类型,假设_Val_typesint的,_Val_type::pointer被定义为int *,那么上面的表达式将值初始化一个int *,这意味着它初始化它为零,零可以转换为nullptr。长话短说,它将_Myfirst数据成员设置为nullptr

最新更新