C++ 了解不同指针类型的理由
作为为指针和非指针数据类型创建独立模型的一致决定,微软提出了一组数据类型,强烈建议使用它们,而不是像POD一样的C++ 了解不同指针类型的理由,c++,windows,visual-c++,porting,C++,Windows,Visual C++,Porting,作为为指针和非指针数据类型创建独立模型的一致决定,微软提出了一组数据类型,强烈建议使用它们,而不是像POD一样的int,\uu int64,long(有符号的和无符号的版本) 微软目前采用的模型是IL32P64,它强制所有C类型的指针转换为整数类型,并允许指针截断。这迫使他们想出了_PTR类型。对于每个有效的整数类型(带符号的非IGED),如long,int,或非POD类型,如DWORD,他们提出了等效的符号DWORD\u PTR,int\u PTR 如果我们解析typedef链,所有这些类型归
int
,\uu int64
,long
(有符号的和无符号的版本)
微软目前采用的模型是IL32P64,它强制所有C类型的指针转换为整数类型,并允许指针截断。这迫使他们想出了_PTR类型。对于每个有效的整数类型(带符号的非IGED),如long
,int
,或非POD类型,如DWORD
,他们提出了等效的符号DWORD\u PTR
,int\u PTR
如果我们解析typedef链,所有这些类型归结为以下定义
#if defined(_WIN64)
typedef unsigned __int64 ULONG_PTR;
#else
typedef unsigned long ULONG_PTR;
#endif
#if defined(_WIN64)
typedef unsigned __int64 LONG_PTR;
#else
typedef unsigned long LONG_PTR;
#endif
我想知道的是,为什么要为每个整数类型和非POD等效类型创建不同的类型定义,而不是创建一个供所有人使用的单一类型(比如一个INT\u PTR
和UINT\u PTR
)
那我为什么想知道呢?
如果你总是在微软平台上,那么微软想出了什么就很少有问题了。如果您的代码是poly平台,则会出现问题。您必须为*nix定义等效类型,以使代码可移植
我计划只创建两个指针类型,即具有等效定义的XI64_PTR
和XU64_PTR
,并使用它,而不管前面的类型是什么。可能重复:@CongXu:如果比较这两个问题,它们会解决两个不同的问题。“必须为*nix定义等效类型”-那不是真的。你不必这么做。使用C++标准中描述的类型,你将是安全的,可移植的C++代码。@ VladLazarenko:我同意,所以在我这么做之前,需要<代码>了解不同指针类型< /C>的理由,而不是在Windows中创建一个(技术上两个)。