请问size_t是什么类型?

pink_tulip 2005-12-30 07:47:39
以下代码

map<int,char> x;
cout<<x.size()<<endl;

(vc2003)warning C4267: “参数” : 从“size_t”转换到“unsigned int”,可能丢失数据

查MSDN得:
size_t unsigned integer Result of sizeof operator. STDDEF.H and other include files


请问是怎么回事?
...全文
5169 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sjtuwang 2005-12-30
  • 打赏
  • 举报
回复
是的。而且你还可以自己重新定义的!
pink_tulip 2005-12-30
  • 打赏
  • 举报
回复
#ifndef _SIZE_T_DEFINED
#ifdef _WIN64
typedef unsigned __int64 size_t;
#else
typedef _W64 unsigned int size_t;
#endif
#define _SIZE_T_DEFINED
#endif

STDDEF.H的内容,是不是不同的编译器里不一样呢?
pink_tulip 2005-12-30
  • 打赏
  • 举报
回复
但是我看MSDN上好像是说size_t是微软自己的定义

The Microsoft run-time library defines the following standard types.
.....
.....
size_t unsigned integer Result of sizeof operator. STDDEF.H and other include files
.....
jixingzhong 2005-12-30
  • 打赏
  • 举报
回复
设计 size_t 就是为了适应多个 平台的 需要 ...
云梦谭 2005-12-30
  • 打赏
  • 举报
回复
size_t是针对系统定制的一种数据类型,一般是整形,因为C/C++标准只定义一最低的位数,
而不是必需的固定位数。而且在内存里,对数的高位对齐存储还是低位对齐存储各系统都不一样。为了提高代码的可移植性,就有必要定议这样的数据类型。一般这种类型都会定义到它具体占几位内存等。当然,有些是编译器或系统已经给定义好的。具体要查看技手册。
pink_tulip 2005-12-30
  • 打赏
  • 举报
回复
感谢楼上的。
sankt 2005-12-30
  • 打赏
  • 举报
回复
很多情况下是:
typedef unsigned long size_t;
whyglinux 2005-12-30
  • 打赏
  • 举报
回复
这是因为测试 32 位代码的 64 位兼容性问题而出现的警告,由 /WP64 开关控制,默认是打开的。

在上面的程序中实际上不存在任何兼容性问题(也就是说在这里出现warning是不应该的,是编译器的一个败笔),你可放心地把 /WP64 开关关闭以避免这个warning。
zhousqy 2005-12-30
  • 打赏
  • 举报
回复
把unsigned int的地方换成size_t
pink_tulip 2005-12-30
  • 打赏
  • 举报
回复
请问这个有时是怎么判断?
我如何可以避免这个warning?
vollin 2005-12-30
  • 打赏
  • 举报
回复
size_t
有时就是unsigned int;
有时就是unsigned long;
在你写的代码里就是unsigned long;

64,642

社区成员

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

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