Espacios de nombres
Variantes
Acciones

Operador sizeof

De cppreference.com
< cpp‎ | language
 
 
 
 

Consulta el tamaño de un objeto o tipo.

Se usa cuando debe conocerse el tamaño real del objeto.

Contenido

[editar] Sintaxis

sizeof( tipo ) (1)
sizeof expresión (2)

Ambas versiones devuelven una constante de tipo std::size_t.

[editar] Explicación

1) Devuelve el tamaño en bytes de la representación del objeto de tipo.
2) Devuelve el tamaño en bytes de la representación del objeto del tipo que sería devuelto por la expresión, si esa expresión se evalúa.

[editar] Notas

Dependiendo de la arquitectura del ordenador, un byte puede consistir en 8 o más bits, el número exacto está registrado en CHAR_BIT.

Las siguientes expresiones sizeof siempre se evalúan a 1:

  • sizeof(char)
  • sizeof(signed char)
  • sizeof(unsigned char)
(desde C++17)
  • sizeof(char8_t)
(desde C++20)

No se puede usar sizeof con tipos función, tipos incompletos, o campos de bits que son gl-valores.

Cuando se aplica a un tipo referencia, el resultado es el tamaño del tipo referenciado.

Cuando se aplica a un tipo clase, el resultado es el número de bytes ocupado por un objeto completo de esa clase, incluyendo cualquier relleno requerido para poner dicho objeto en un array. El número de bytes ocupado por un subobjeto potencialmente traslapante puede ser menor que el tamaño de ese objeto.

Cuando se aplica a un tipo clase vacío, siempre devuelve 1.

Cuando se aplica a una expresión, sizeof no evalúa la expresión, e incluso si la expresión designa un objeto polimórfico, el resultado es el tamaño del tipo estático de la expresión. No se realizan conversiones de l-valor a r-valor, array a puntero, o función a puntero. La materialización temporal, sin embargo, (formalmente) se realiza para argumentos pr-valor: el programa está mal formado si el argumento no es destruible. (desde C++17)

[editar] Palabra clave

sizeof

[editar] Ejemplo

La salida del ejemplo corresponde con un sistema con punteros de 64-bits e int de 32-bits.

#include <iostream>
 
struct Empty {};
struct Base { int a; };
struct Derived : Base { int b; };
struct Bit { unsigned bit: 1; };
 
int main()
{
    Empty e;
    Derived d;
    Base& b = d;
    [[maybe_unused]] Bit bit;
    int a[10];
    std::cout << "1) para clase vacia:                " << sizeof e        << "\n"
              << "2) para puntero:                    " << sizeof &e       << "\n"
//            << "3) para funcion:                    " << sizeof(void())  << "\n" // ERROR
//            << "4) para tipo incompleto:            " << sizeof(int[])   << "\n" // ERROR
//            << "5) para campo de bit:               " << sizeof bit.bit  << "\n" // ERROR
              << "6) para clase Bit:                  " << sizeof(Bit)     << '\n'
              << "7) para array de 10 int:            " << sizeof(int[10]) << "\n"
              << "8) para array de 10 int (2):        " << sizeof a        << "\n"
              << "9) longitud de array de 10 int:     " << ((sizeof a) / (sizeof *a))   << "\n"
              << "A) longitud de array de 10 int (2): " << ((sizeof a) / (sizeof a[0])) << "\n"
              << "B) para Derived:                    " << sizeof d        << "\n"
              << "C) para Derived a traves de Base:   " << sizeof b        << "\n";
 
}

Posible salida:

1) para clase vacia:                1
2) para puntero:                    8
6) para clase Bit:                  4
7) para array de 10 int:            40
8) para array de 10 int (2):        40
9) longitud de array de 10 int:     10
A) longitud de array de 10 int (2): 10
B) para Derived:                    8
C) para Derived a traves de Base:   4

[editar] Véase también

operador alignof(C++11) Consulta los requerimientos de alineación de un tipo (desde C++11) [editar]
sizeof... operator(C++11) Consulta el número de elementos en un paquete de parámetros.[editar]