既然有了 size_t , 为什么还要有 size_type 呢?

时间:2023-02-12 17:06:00
既然有了 size_t , 为什么还要有 size_type 呢?

class container
{
public:
    typedef size_t size_type;
    //...
};

7 个解决方案

#1


这个应该是根据应用需要,便于扩展,可能size_t不太好记,通过typedef size_t和size_type都可以表示同一个类型

#2


我也想知道,不过晃眼一看明显的好处是将来如果将修改则更方便,比如typedef unsigned short size_type;

#4


size_t是编译系统固有(build-in)的数据类型。在32位编译器系统上是4字节,在64位上是8字节。

用户自定义数据类型内部的这样的语句:typedef size_t size_type; 其意义是
1. 兼容目的。可能老代码用过typedef unsigned int32 size_type;之类的。
2. 扩展目的。根据不同场合需要,程序中的size_type可以有不同长度。各处代码都直接使用size_type数据类型。而你只需要在一处给出size_type的具体定义,即可影响程序中的多处对它的使用。

#5


这是为了统一 容器类库的对外接口
模板类库的接口,只需要形式相同,而不必强求类型一致。
STL类库中的 容器类库,本来就是模板类库。
所以这样定义
如果直接用 size_t 那就不能变通了
实际上,STL类库,不是直接定义 size_type 为size_t
而是  size_t 作为 模板的缺省参数传入。
大概模式是

template <typename T,typename SizeT = size_t >class container
{
public:
    typedef SizeT size_type;
    //...
};

#6


去看《STL源码剖析》

这是STL在容器里定的类型,用来实现trait特性,除了size_type,还有value_type等等

根据不同窗口,size_type并不一定表示size_t,比如你可以自己实现一个容器,里面这样定义size_type:
typedef int size_type;

#7


container 的 size_type 不一定要用 size_t 啊,根据需求可以选择任意合适的 unsigned integer type 。

#1


这个应该是根据应用需要,便于扩展,可能size_t不太好记,通过typedef size_t和size_type都可以表示同一个类型

#2


我也想知道,不过晃眼一看明显的好处是将来如果将修改则更方便,比如typedef unsigned short size_type;

#3


#4


size_t是编译系统固有(build-in)的数据类型。在32位编译器系统上是4字节,在64位上是8字节。

用户自定义数据类型内部的这样的语句:typedef size_t size_type; 其意义是
1. 兼容目的。可能老代码用过typedef unsigned int32 size_type;之类的。
2. 扩展目的。根据不同场合需要,程序中的size_type可以有不同长度。各处代码都直接使用size_type数据类型。而你只需要在一处给出size_type的具体定义,即可影响程序中的多处对它的使用。

#5


这是为了统一 容器类库的对外接口
模板类库的接口,只需要形式相同,而不必强求类型一致。
STL类库中的 容器类库,本来就是模板类库。
所以这样定义
如果直接用 size_t 那就不能变通了
实际上,STL类库,不是直接定义 size_type 为size_t
而是  size_t 作为 模板的缺省参数传入。
大概模式是

template <typename T,typename SizeT = size_t >class container
{
public:
    typedef SizeT size_type;
    //...
};

#6


去看《STL源码剖析》

这是STL在容器里定的类型,用来实现trait特性,除了size_type,还有value_type等等

根据不同窗口,size_type并不一定表示size_t,比如你可以自己实现一个容器,里面这样定义size_type:
typedef int size_type;

#7


container 的 size_type 不一定要用 size_t 啊,根据需求可以选择任意合适的 unsigned integer type 。