type sirve que para long definicion data bool c++ string int size-type

c++ - sirve - string:: size_type en lugar de int



short c++ para que sirve (3)

const std::string::size_type cols = greeting.size() + pad * 2 + 2;

¿Por qué string::size_type ? int se supone que funciona! ¡Tiene números!


Un short también tiene números. Como lo hace un char firmado.

Pero ninguno de esos tipos tiene la garantía de ser lo suficientemente grande como para representar los tamaños de las cadenas.

string::size_type garantiza precisamente eso. Es un tipo que es lo suficientemente grande como para representar el tamaño de una cadena, sin importar cuán grande sea esa cadena.

Para un ejemplo simple de por qué esto es necesario, considere plataformas de 64 bits. En general, int todavía tiene 32 bits, pero tiene más de 2 ^ 32 bytes de memoria.

Por lo tanto, si se usó un int (con signo), no podría crear cadenas de más de 2 ^ 31 caracteres. size_type será un valor de 64 bits en esas plataformas, sin embargo, por lo que puede representar cadenas más grandes sin ningún problema.


Un tipo de size_type anidado typedef es un requisito para los contenedores compatibles con STL (lo que ocurre std::string ), por lo que el código genérico puede elegir el tipo de entero correcto para representar los tamaños.

No tiene sentido usarlo en el código de la aplicación, un size_t está completamente bien ( int no, porque está firmado, y obtendrá advertencias de comparación firmadas / sin firmar).


El ejemplo que has dado,

const std::string::size_type cols = greeting.size() + pad * 2 + 2;

es de Accelerated C ++ by Koenig . También declara la razón de su elección inmediatamente después de esto, a saber:

El tipo std :: string define size_type para que sea el nombre del tipo apropiado para contener el número de caracteres en una cadena. Siempre que necesitemos una variable local para contener el tamaño de una cadena, debemos usar std :: string :: size_type como el tipo de esa variable.

La razón por la que hemos dado a cols un tipo de std :: string :: size_type es para garantizar que cols sea capaz de contener el número de caracteres en saludo, sin importar cuán grande sea ese número. Podríamos haber dicho simplemente que cols tiene tipo int, y de hecho, hacerlo probablemente funcione. Sin embargo, el valor de cols depende del tamaño de la entrada a nuestro programa, y ​​no tenemos control sobre cuánto tiempo puede ser esa entrada. Es concebible que alguien le de a nuestro programa una cadena tan larga que un int sea insuficiente para contener su longitud.