对于具有默认分配器的标准容器,std :: container :: size_type是否保证为size_t?

时间:2014-10-17 21:40:39

标签: c++ stl portability

像:

  • std::string<T>::size_type
  • std::list<T>::size_type
  • std::map<T>::size_type
  • std::vector<T>::size_type

cplusplus.comcppreference.com都说它们通常是size_t,但它们是否真正,明确地保证标准为size_t除非使用自定义分配器?

2 个答案:

答案 0 :(得分:7)

对于STL容器 - 不。 [container.requirements.general]中标准的表96列出了任何容器X的容器需求,非常清楚地说明了这一点:

enter image description here


但是,对于basic_stringsize_type定义为

typedef typename allocator_traits<Allocator>::size_type size_type;

反过来size_tstd::allocator<..>作为分配器。

此外,std::array根据[array.overview] / 3使用size_t作为size_type

答案 1 :(得分:0)

size_type不保证为size_t

default allocator size_type是,所以默认为size_t

从标准20.6.9

template <class T> class allocator {
public:
typedef size_t size_type;
typedef ptrdiff_t difference_type;
....

容器的size_type派生自分配器:

typedef typename allocator_traits<Allocator>::size_type size_type;