可以安全地使用哪种整数类型来始终保存指针值?是std::intptr_t
吗?但是我认为int
还将始终保留一个指针值,并且在每个版本中都存在,并且如果输入大小不正确,int32_t
或int64_t
之类的东西将被更改
答案 0 :(得分:4)
可以安全且方便地使用哪种整数类型来始终保存指针值:
会是std :: intptr_t吗?
以整数存储指针值的整个想法不一定完全适用于所有系统。
std::intptr_t
是提供它的系统上最合适的选择。相应地,std::uintptr_t
。
但是我认为int也会始终保留一个指针值
您误会了。不能保证int
总是能够代表所有指针值。实际上,在most common 64 bit systems上-指针是64位-int
是32位。
出于推理原因为什么,这是概述UNIX / POSIX情况的原因的文档:http://www.unix.org/whitepapers/64bit.html
您还应该首先考虑为什么。我可以想到一些原因:
std::align
以来,这不再是必需的。std::printf
系列函数和字符流)。但是,并非在所有上下文中都可用(信号处理程序;独立的实现),因此在这些上下文中指向整数转换的指针可能有意义。std::hash
(C ++ 11)已经对指针进行了专门化,但是如果您发现标准库实现不足,可以在转换为整数后使用自定义哈希函数。答案 1 :(得分:-1)
是的,std :: intptr_t是更好的选择。它被定义为不同的宽度,以将地址保存为x64或x86系统上的指针。
// Definitions of common types
#ifdef _WIN64
typedef unsigned __int64 size_t;
typedef __int64 ptrdiff_t;
typedef __int64 intptr_t;
#else
typedef unsigned int size_t;
typedef int ptrdiff_t;
typedef int intptr_t;
#endif