Introducción a Patrones de Diseño en C++ con Qt4/1.14 Tipos Simples de C++

Versión para imprimir esta pagina

Tipos Simples de C++ editar

Los tipos simples soportados en C/C++ están listados en la Tabla 1.2.

C/C++ también proporciona un símbolo especial que significa la ausencia de información de tipo: void.

Los tipos simpres de C++ pueden (en su mayoría) ser modificados por las siguientes palabras clave que producen otros tipos simples:


  • short
  • long
  • signed
  • unsigned[1]

Tabla 1.2 editar

Plantilla:Tabla


Los compiladores de C++ te permiten omitir int desde short int, long int, y unsigned int. Puedes omitir signed desde la mayoría de los tipos, pues está por defecto.


De el rango de valores para las dependencias de tipo en particular sobre la arquitectura subrayada o la maquina en la que el compilador está corriendo, el estándar ANSI/ISO para C++ no especifica la medida (en bytes) de ninguno de estos tipos. Este solo garantiza que un tipo dado (p.e., int) no debería ser mas pequeño que uno de los que aparece sobre él (p.e., short) en la Tabla 1.2.


Existe un operador especial sizeof() que devuelve el número de caracteres[2] que una expresión dada requiere para el almacenamiento. A diferencia de la mayoría de las funciones, el operador sizeof() puede tomar expresiones de valor o expresiones de tipo. El Ejemplo 1.16 muestra como puede ser usado sizeof() y algunos de los valores que este retorna en un sistema x86 de 32-bits.

Ejemplo 1.16 editar

Ejemplo: Ejemplo 1.16 src/early-examples/size/qsize.cpp
  • char *charp = array1; El puntero al primer elemento del array.
  • cout << "sizeof qint32 = " << sizeof (qint32) << "\n"; Garantizado para ser en todas las plataformas de 32 bits.
  • cout << "sizeof qint64 = " << sizeof(qint64) << '\n'; Garantizado para ser en todas las plataformas de 64 bits.
  • cout << "sizeof qchar = " << sizeof (QChar) << endl;' Dos veces tan grande como un caracter.
  • cout << "qstring.length = " << qstring.length() << endl; Para # de bytes, nos aseguramos de tomar en cuenta la medida de QChar
#include <QString>
#include <QTextStream>
#include <QChar>

int main(int argc, char* argv[]) {
   QTextStream cout(stdout);
   int i=0;
   char array1[34] = "Este es un temible arrar C de caracteres";
   char array2[] = "si no está para main, podríamos vaciarlo por completo.";
   char *charp = array1;
   QString qstring = "Esta es una cadena QString unicode. La más preferida." ;
   Q_ASSERT (sizeof(i) == sizeof(int));
   cout << "  Medidas de tipos C: \n";
   cout << "Tamaño de char = " << sizeof(char) << '\n';
   cout << "Tamaño de wchar_t = " << sizeof(wchar_t) << '\n';
   cout << "Tamaño de int = " << sizeof(int) << '\n';
   cout << "Tamaño de long = " << sizeof(long) << '\n';
   cout << "Tamaño de float = " << sizeof(float) << '\n';
   cout << "Tamaño de double = " << sizeof(double) << '\n';
   cout << "Tamaño de double* = " << sizeof(double*) << '\n';
   cout << "Tamaño de array1 = " << sizeof(array1) << '\n';
   cout << "Tamaño de array2 = " << sizeof(array2) << '\n';
   cout << "Tamaño de char* = " << sizeof(charp) << endl;
   cout << "  Medidas de tipos Qt: \n";  
   cout << "Tamaño de qstring = " << sizeof(qstring) << endl;
   cout << "Tamaño de qint32 = " << sizeof (qint32) << "\n";
   cout << "Tamaño de qint64 = " << sizeof(qint64) << '\n';
   cout << "Tamaño de qchar = " << sizeof (QChar) << endl;'
   cout << "qstring.length = " << qstring.length() << endl;
   return 0;
}

Salida:

 Medidas de tipos C: 
Tamaño de char = 1 
Tamaño de wchar_t = 4 
Tamaño de int = 4 
Tamaño de long = 4 
Tamaño de float = 4 
Tamaño de double = 8 
Tamaño de double* = 4 
Tamaño de array1 = 34 
Tamaño de array2 = 45 
Tamaño de char* = 4 
 Medidas de tipos Qt: 
Tamaño de qstring = 4 
Tamaño de qint32 = 4 
Tamaño de qint64 = 8 
Tamaño de qchar = 2 
qstring.length = 42


Nota quye todos los punteros son de la misma medida, independientemente de su tipo.


En la salida, podemos ver que sizeof(qstring) tiene solo 4 bytes, pero es una clase compleja que utiliza memoria dinámica, entonces podemos llamar a length() para obtener el número de caracteres usado para almacenar la cadena. Bajo la cubierta, QString comparte memoria con otras cadenas que tienen el mismo valor, por ello, después de una copia, la memoria dinámica no permanece exclusivamente para un objeto QString.

Los rangos de valores para los tipos integrales (bool, char, int) son definidos en el archivo de cabecera estándar limits.h. Dentro de una instalación típica de *nix este archivo puede ser encontrado en un subdirectorio de /usr/include.


Versión para imprimir esta pagina

  1. Para una mayor discusión sobre las diferencias entre tipos integrales con signo y sin signo, revisa la Sección 18.4.
  2. en la mayoría de los sistemas, un caracter simple es un byte