Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 了解不同指针类型的理由_C++_Windows_Visual C++_Porting - Fatal编程技术网

C++ 了解不同指针类型的理由

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链,所有这些类型归

作为为指针和非指针数据类型创建独立模型的一致决定,微软提出了一组数据类型,强烈建议使用它们,而不是像POD一样的
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中创建一个(技术上两个)。