Pregunta

Tengo un std::vector<unsigned char> m_vData;

m_vData.max_size() siempre devuelve -1. ¿Por qué sucedería eso?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top