【发布时间】:2009-10-23 17:26:04
【问题描述】:
我有一个std::vector<unsigned char> m_vData;
m_vData.max_size() 总是返回 -1。为什么会这样?
【问题讨论】:
-
如果您将结果分配给错误的数据类型,它将返回各种有趣的东西。该函数返回一个
size_t,它是无符号的。如果您看到 -1,您正在将其转换为另一种类型,然后是的,您可能会丢失或更改数据。 :)
我有一个std::vector<unsigned char> m_vData;
m_vData.max_size() 总是返回 -1。为什么会这样?
【问题讨论】:
size_t,它是无符号的。如果您看到 -1,您正在将其转换为另一种类型,然后是的,您可能会丢失或更改数据。 :)
可能是因为您在查看之前将其分配给了签名类型。 max_size 的返回值通常是size_t,它是一个无符号类型。在许多平台上直接转换为 int 将返回 -1。
改用以下方法
std::vector<unsigned char>::size_type v1 = myVector.max_size();
【讨论】:
请注意,max_size() 返回一个无符号的 vector::size_type,因此您看到的是一个负数,因为它在某处进行了转换(您实际上得到了一个非常大的无符号数)。
实现是说它可以处理具有这么多元素的向量(尽管我怀疑你实际上会分配一个)。
这不是向量中元素的数量(或当前为向量保留的)。您可以通过vector::size() 或vector::capacity() 获得这些号码。
【讨论】:
请注意,在大多数平台上,std::vector<unsigned char>::max_size 很可能与 std::numeric_limits<unsigned int>::max() 相同,当转换为带符号的 int 时当然是 -1。
【讨论】: