¿Por qué la función std :: vector max_size () devuelve -1?
Pregunta
Tengo un std::vector<unsigned char> m_vData;
m_vData.max_size()
siempre devuelve -1. ¿Por qué sucedería eso?
Solución
Probablemente porque lo está asignando a un tipo con signo antes de verlo. El valor de retorno de max_size es típicamente size_t
que es un tipo sin signo. Una conversión directa para decir int en muchas plataformas devolvería -1.
Pruebe lo siguiente
std::vector<unsigned char>::size_type v1 = myVector.max_size();
Otros consejos
Tenga en cuenta que max_size()
devuelve un vector::size_type
que no está firmado, por lo que está viendo un número negativo debido a la conversión en alguna parte (realmente está obteniendo un número sin signo muy grande).
La implementación dice que podría manejar vectores con tantos elementos (aunque dudo que realmente se asigne uno).
No es el número de elementos en el vector (o actualmente reservado para el vector). Puede obtener esos números con vector::size()
o vector::capacity()
.
Tenga en cuenta que, en la mayoría de las plataformas, es muy probable que std::vector<unsigned char>::max_size
sea igual a std::numeric_limits<unsigned int>::max()
, que por supuesto es -1 cuando se convierte en un int firmado.