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

HeBanBei 2015-09-30 11:40:16
既然有了 size_t , 为什么还要有 size_type 呢?

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

...全文
283 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2015-10-04
  • 打赏
  • 举报
回复
去看《STL源码剖析》 这是STL在容器里定的类型,用来实现trait特性,除了size_type,还有value_type等等 根据不同窗口,size_type并不一定表示size_t,比如你可以自己实现一个容器,里面这样定义size_type: typedef int size_type;
fefe82 2015-10-04
  • 打赏
  • 举报
回复
container 的 size_type 不一定要用 size_t 啊,根据需求可以选择任意合适的 unsigned integer type 。
lm_whales 2015-10-03
  • 打赏
  • 举报
回复
这是为了统一 容器类库的对外接口 模板类库的接口,只需要形式相同,而不必强求类型一致。 STL类库中的 容器类库,本来就是模板类库。 所以这样定义 如果直接用 size_t 那就不能变通了 实际上,STL类库,不是直接定义 size_type 为size_t 而是 size_t 作为 模板的缺省参数传入。 大概模式是

template <typename T,typename SizeT = size_t >class container
{
public:
    typedef SizeT size_type;
    //...
};
ligand 2015-09-30
  • 打赏
  • 举报
回复
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的具体定义,即可影响程序中的多处对它的使用。
iyomumx 2015-09-30
  • 打赏
  • 举报
回复
sdghchj 2015-09-30
  • 打赏
  • 举报
回复
我也想知道,不过晃眼一看明显的好处是将来如果将修改则更方便,比如typedef unsigned short size_type;
二班的码农 2015-09-30
  • 打赏
  • 举报
回复
这个应该是根据应用需要,便于扩展,可能size_t不太好记,通过typedef size_t和size_type都可以表示同一个类型

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧