64位可移植性问题
这一切都源于我在编译器警告消息(C4267)戳尝试下面一行时:64位可移植性问题
const unsigned int nSize = m_vecSomeVec.size();
size()
返回这虽然typedef定义到unsigned int的一个为size_t,实际上不是一个unsigned int。我相信这与64位可移植性问题有关,但是有人可以解释它对我更好一些吗? (我不只是想禁用64位警告。)
这取决于实施。例如,std::size_t
具有最小的所需尺寸。但没有上限。为避免这些情况,请始终使用适当的typedef:
const std::vector<T>::size_type nSize = m_vecSomeVec.size();
您将始终保持安全。
True - size_t对于矢量
如果size_t
是typedef:编辑为unsigned int
,那么当然这是一个unsigned int
,在您的特定平台上。但它是抽象的,所以你不能依赖它总是是一个unsigned int
,它可能在其他平台上更大。
可能它并没有做得更大,因为这样做会花费太多,其中超过2^32项目的向量不是很常见。
编译为64位平台时,size_t
将是64位类型。因此,当启用“检测64位可移植性问题”时,Visual Studio会给出关于将size_t
s分配给int
的警告。
Visual C++通过__w64
令牌获取关于size_t
的此信息,例如, __w64 unsigned int
。
参见下面的链接以获得更多关于64位移植问题.. http://www.viva64.com/en/a/0065/
根据编译器,int
可以是在64位的地32位。
SO你为什么不用nSize的size_t? C++非常敏感/严格(按设计)。所以总是使用正确的类型。 – 2008-12-04 18:05:49