2011-01-31 27 views
37

¿Qué significa esta declaración de C++?vector <int> :: size_type en C++

vector<int>::size_type x; 

Y, ¿cuál es el uso del operador alcance :: aquí? En otras palabras, ¿cómo leemos esta declaración en inglés?

Por ejemplo, para X::x(){...}, decimos que es un x()member function de class X.

Respuesta

52

size_type es un (estático) miembro tipo del tipo vector<int>. Por lo general, es un typedef para std::size_t, que en sí mismo suele ser typedef para unsigned int o unsigned long long.

+7

¿Cuáles son las excepciones a esto 'por lo general'? Es decir, ¿cuándo es inusual? – ibrahim5253

+1

"Normalmente" significa que el estándar no lo especifica, pero eso es lo que las implementaciones populares decidieron hacer. En realidad, sé una "excepción". Linux glibc usa 'unsigned long' para' size_t' en la plataforma x86_64. – proski

3

vector es una plantilla

lo que el tipo vector templated con int tiene un miembro de typedef llamado size_type. x se define como una variable de ese tipo.

18

Lo leería como "declarar x como una variable de un tipo adecuado para contener el tamaño de un vector". El vector define su propio tipo para su longitud, y siempre es más limpio usarlo si es posible, en lugar de "adivinar" y usar int, unsigned int, long, unsigned long o size_t etc. directamente como de otra manera lo necesitaría hacer.

+1

¿Es necesario incluir esta parte 'vector '? ¿Cómo podemos definir 'x' como el' size_type' que el vector define por sí mismo? Gracias – Simplicity

+3

@ user588855: Sí, se debe usar el nombre completo. Es posible que el vector sea una plantilla especializada, cuyo size_type sea diferente de, p. vector :: size_type. – unwind

+1

En el caso del 'vector :: size_type', ¿no sería el tamaño un' int'? cuando dices que el 'size_type' puede ser diferente en este caso, ¿qué quieres decir con eso? Gracias – Simplicity

Cuestiones relacionadas