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
请问是怎么回事?
11 个解决方案
#1
size_t
有时就是unsigned int;
有时就是unsigned long;
在你写的代码里就是unsigned long;
有时就是unsigned int;
有时就是unsigned long;
在你写的代码里就是unsigned long;
#2
请问这个有时是怎么判断?
我如何可以避免这个warning?
我如何可以避免这个warning?
#3
把unsigned int的地方换成size_t
#4
这是因为测试 32 位代码的 64 位兼容性问题而出现的警告,由 /WP64 开关控制,默认是打开的。
在上面的程序中实际上不存在任何兼容性问题(也就是说在这里出现warning是不应该的,是编译器的一个败笔),你可放心地把 /WP64 开关关闭以避免这个warning。
在上面的程序中实际上不存在任何兼容性问题(也就是说在这里出现warning是不应该的,是编译器的一个败笔),你可放心地把 /WP64 开关关闭以避免这个warning。
#5
很多情况下是:
typedef unsigned long size_t;
typedef unsigned long size_t;
#6
感谢楼上的。
#7
size_t是针对系统定制的一种数据类型,一般是整形,因为C/C++标准只定义一最低的位数,
而不是必需的固定位数。而且在内存里,对数的高位对齐存储还是低位对齐存储各系统都不一样。为了提高代码的可移植性,就有必要定议这样的数据类型。一般这种类型都会定义到它具体占几位内存等。当然,有些是编译器或系统已经给定义好的。具体要查看技手册。
而不是必需的固定位数。而且在内存里,对数的高位对齐存储还是低位对齐存储各系统都不一样。为了提高代码的可移植性,就有必要定议这样的数据类型。一般这种类型都会定义到它具体占几位内存等。当然,有些是编译器或系统已经给定义好的。具体要查看技手册。
#8
设计 size_t 就是为了适应多个 平台的 需要 ...
#9
但是我看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
.....
The Microsoft run-time library defines the following standard types.
.....
.....
size_t unsigned integer Result of sizeof operator. STDDEF.H and other include files
.....
#10
#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的内容,是不是不同的编译器里不一样呢?
#ifdef _WIN64
typedef unsigned __int64 size_t;
#else
typedef _W64 unsigned int size_t;
#endif
#define _SIZE_T_DEFINED
#endif
STDDEF.H的内容,是不是不同的编译器里不一样呢?
#11
是的。而且你还可以自己重新定义的!
#1
size_t
有时就是unsigned int;
有时就是unsigned long;
在你写的代码里就是unsigned long;
有时就是unsigned int;
有时就是unsigned long;
在你写的代码里就是unsigned long;
#2
请问这个有时是怎么判断?
我如何可以避免这个warning?
我如何可以避免这个warning?
#3
把unsigned int的地方换成size_t
#4
这是因为测试 32 位代码的 64 位兼容性问题而出现的警告,由 /WP64 开关控制,默认是打开的。
在上面的程序中实际上不存在任何兼容性问题(也就是说在这里出现warning是不应该的,是编译器的一个败笔),你可放心地把 /WP64 开关关闭以避免这个warning。
在上面的程序中实际上不存在任何兼容性问题(也就是说在这里出现warning是不应该的,是编译器的一个败笔),你可放心地把 /WP64 开关关闭以避免这个warning。
#5
很多情况下是:
typedef unsigned long size_t;
typedef unsigned long size_t;
#6
感谢楼上的。
#7
size_t是针对系统定制的一种数据类型,一般是整形,因为C/C++标准只定义一最低的位数,
而不是必需的固定位数。而且在内存里,对数的高位对齐存储还是低位对齐存储各系统都不一样。为了提高代码的可移植性,就有必要定议这样的数据类型。一般这种类型都会定义到它具体占几位内存等。当然,有些是编译器或系统已经给定义好的。具体要查看技手册。
而不是必需的固定位数。而且在内存里,对数的高位对齐存储还是低位对齐存储各系统都不一样。为了提高代码的可移植性,就有必要定议这样的数据类型。一般这种类型都会定义到它具体占几位内存等。当然,有些是编译器或系统已经给定义好的。具体要查看技手册。
#8
设计 size_t 就是为了适应多个 平台的 需要 ...
#9
但是我看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
.....
The Microsoft run-time library defines the following standard types.
.....
.....
size_t unsigned integer Result of sizeof operator. STDDEF.H and other include files
.....
#10
#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的内容,是不是不同的编译器里不一样呢?
#ifdef _WIN64
typedef unsigned __int64 size_t;
#else
typedef _W64 unsigned int size_t;
#endif
#define _SIZE_T_DEFINED
#endif
STDDEF.H的内容,是不是不同的编译器里不一样呢?
#11
是的。而且你还可以自己重新定义的!