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
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。