当前位置:嗨网首页>书籍在线阅读

21-种类型和一个常量

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

F.1 13种类型和一个常量

模板basic_string定义了几种类型,供以后定义方法时使用:

typedef traits                                 traits_type;
typedef typename traits::char_type             value_type;
typedef Allocator                              allocator_type;
typedef typename Allocator::size_type          size_type;
typedef typename Allocator::difference_type    difference_type;
typedef typename Allocator::reference          reference;
typedef typename Allocator::const_reference    const_reference;
typedef typename Allocator::pointer            pointer;
typedef typename Allocator::const_pointer      const_pointer;

traits是对应于特定类型(如char_traits)的模板参数;traits_type将成为该特定类型的typedef。下述表示法意味着char_type是traits表示的类中定义的一个类型名:

typedef typename traits::char_type value_type;

关键字typename告诉编译器,表达式trait::char_type是一种类型。例如,对于string具体化,value_type为char。

size_type与size_of的用法相似,只是它根据存储的类型返回字符串的长度。对于string具体化,将根据char返回字符串的长度,在这种情况下,size_type与size_of等效。size_type是一种无符号类型。

differrence_type用于度量字符串中两个元素之间的距离(单位为元素的长度)。通常,它是底层类型size_type有符号版本。

对于char具体化来说,pointer的类型为char *,而reference的类型为char &类型。然而,如果要为自己设计的类型创建具体化,则这些类型(pointer和reference)可以指向类,与基本指针和引用有相同的特征。

为将标准模板库(STL)算法用于字符串,该模板定义了一些迭代器类型:

typedef (models random access iterator)           iterator;
typedef (models random access iterator)           const_iterator;
typedef std::reverse_iterator<iterator>           reverse_iterator;
typedef std::reverse_iterator<const_iterator>     const_reverse_iterator;

该模板还定义了一个静态常量:

static const size_type npos = -1;

由于size_type是无符号的,因此将-1赋给npos相当于将最大的无符号值赋给它,这个值比可能的最大数组索引大1。