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_typeQt容器的版本与版本有关。在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 ++不会显示任何类似的内容。