- ¿De dónde viene
size_t
cuando no tengo nada incluido? - ¿Es razonable suponer siempre
size_t
==std::size_t
? - ¿Cuándo debo usar el
size_type
en contenedoresstd
(string::size_type
,vector<T>::size_type
, etc.)?
Respuesta
¿De dónde viene size_t cuando no tengo nada incluido en un proyecto vacío?
Si no tiene nada incluido, no puede usar size_t
. Se define en <stddef.h>
(y quizás también en <cstddef>
, si su versión de ese encabezado incluye las definiciones en el espacio de nombres global así como std
).
¿Es razonable suponer siempre size_t == std :: size_t?
Sí. Todos los tipos y funciones definidas por la biblioteca de C están incluidas en el std
espacio de nombres, siempre y cuando incluya la cabecera apropiada C++ (por ejemplo, en lugar de <cstddef>
<stddef.h>
)
Cuando debo usar std :: _ :: ¿tipo de letra?
¿Te refieres a los tipos size_type
definidos en algunas clases y plantillas estándar como vector
? Podría usarlos cuando use esas clases si lo desea. En la mayoría de los casos, sabrá que es lo mismo que size_t
, por lo que es mejor que lo use y guarde un poco de tipeo. Si está escribiendo código genérico, donde no sabe cuál es la clase, entonces es mejor usar size_type
en caso de que no sea compatible con size_t
.
Por ejemplo, es posible que desee escribir un contenedor diseñado para contener más elementos de los que puede representar size_t
. Puede usar algún tipo de tipo de número grande para representar el tamaño del contenedor, que no es convertible a size_t
.En ese caso, el código como size_t s = c.size()
no compilaría; en su lugar, necesitaría usar Container::size_type
.
En su primer punto, puedo usar size_t cuando no he incluido nada. Como referencia, estoy usando VS2010. – David
@Dave: Supuestamente se trata de una extensión de Microsoft para el lenguaje, hay muchos de ellos. Intenta compilar con extensiones de idioma deshabilitadas. –
Tiene razón sobre lo que quise decir con 'std :: ____ :: size_type' pero ¿puede explicar en detalle cuándo podría ser 'incompatible' con size_t, y la diferencia entre lo que std :: size_t y :: size_type representan? – David
¿De dónde viene size_t
cuando no tengo nada incluido en un proyecto vacío?
size_t
es un entero base sin signo de memsize-type definido en la biblioteca estándar de C/C++. Se define en "stddef.h"
para C
y en <cstddef>
para C++
.
Tipos definidos por el archivo de cabecera "stddef.h"
se encuentran en el espacio de nombres global, mientras que <cstddef>
cabecera coloca el tipo size_t
en el espacio de nombres std
.
"stddef.h"
de C se incluye en C++ para la compatibilidad, y por lo tanto el tipo se puede encontrar tanto en el espacio de nombres global (::size_t
) y el espacio de nombres std
(std::size_t
).
size_t
se define en <cstddef>
y está en std
namespace.
Sería bueno (al menos para mí aprender) si el infractor explica el motivo. – Sanish
- 1. 'size_t' vs 'container :: size_type'
- 2. std :: string :: longitud() vs. std :: string :: size()
- 3. std :: string vs. char *
- 4. Rendimiento std :: strstr vs std :: string :: encontrar
- 5. int vs size_t en 64bit
- 6. std :: cin.getline() vs. std :: cin
- 7. std :: mem_fun vs std :: mem_fn
- 8. printf vs std :: cout
- 9. std :: list vs std :: vector iteration
- 10. std :: this_thread :: yield() vs std :: this_thread :: sleep_for()?
- 11. Diferencia: std :: runtime_error vs std :: exception()
- 12. Rendimiento relativo de std :: vector vs. std :: list vs. std :: slist?
- 13. Rendimiento de qsort vs std :: sort?
- 14. std :: atomic | compare_exchange_weak vs. compare_exchange_strong
- 15. std :: vector vs normal array
- 16. Costo de usar std :: map con std :: string keys vs int keys?
- 17. ¿Transmitir de size_t a int o iterar con size_t?
- 18. std :: hash_set vs std :: unordered_set, ¿son lo mismo?
- 19. arrojar nueva std :: excepción vs std :: excepción tiro
- 20. iterador avanzado para el std :: vector std :: advance VS operator +?
- 21. size_t contra uintptr_t
- 22. .NET equivalente de size_t
- 23. printf for size_t
- 24. comparación con int size_t
- 25. Iterar std :: vector múltiple
- 26. std :: vector <std::string> crash
- 27. SWIG: Cómo ajustar std :: string & (std :: string pasado por referencia)
- 28. C++, mejores prácticas, int o size_t?
- 29. Cómo convertir System :: String^en std :: string?
- 30. ¿Es una buena práctica usar std :: size_t en todo el lugar?
Suena como un compilador específico –
¿Podría explicar lo que observó para su primer punto? Para tu compilador, ¿'size_t a;' funciona como una declaración incluso cuando no has '#incluido'd nada? Dado que parece ser una pregunta sobre una implementación, ¿podría decirnos qué implementación está utilizando? –
@DavidThornley Eso es exactamente lo que veo, estoy usando VS2010 – David