Answers:
标准容器限定size_type
为一个typedef到Allocator::size_type
(分配器是模板参数),其为std::allocator<T>::size_type
被典型地定义为size_t
(或兼容的类型)。因此,对于标准情况,它们是相同的。
但是,如果使用自定义分配器,则可以使用其他基础类型。因此container::size_type
,为了获得最大的通用性,它是优选的。
size_t
赌注是这些约束的实际实施。但是,在C ++ 11中,现在std::make_unsigned<X::difference_type>::type
默认将其定义为:默认情况下。实际上,这可能与相同或兼容size_t
。
size_type
过时的内容。是什么赋予了?
size_t
定义为用于对象大小的类型,并且取决于平台。container::size_type
是用于容器中元素数量的类型,并且与容器相关。所有std
容器都size_t
用作size_type
,但是每个独立的库供应商都会选择一种适合其容器的类型。
如果你看 t,您会发现size_type
Qt容器的版本与版本有关。在Qt3中是unsigned int
,在Qt4中已更改为int
。
int
不是ssize_t
,int
是那种小。
对于std::[w]string
,std::[w]string::size_type
等于std::allocator<T>::size_type
,等于std::size_t
。对于其他容器,它是一些实现定义的无符号整数类型。
有时,拥有确切的类型很有用,例如,一个人知道该类型环绕到(例如to UINT_MAX
)的位置,以便人们可以使用该类型。或者对于模板,您确实需要将两个相同的类型传递给函数/类模板。
我经常发现我size_t
还是为了简洁或迭代器而使用。在通用代码中,由于您通常不知道模板使用哪个容器实例以及这些容器的大小,因此Container::size_type
如果需要存储容器大小,则必须使用typedef。
N1804
而且我Allocator::size_type
和之间没有任何关系size_type
。快速浏览libstdc ++不会显示任何类似的内容。