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 ser conocido 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 es evaluable.

[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.

sizeof(char), sizeof(char8_t), sizeof(signed char), y sizeof(unsigned char) siempre devuelven 1.

No se puede usar sizeof con tipos de función, tipos incompletos, o campos de bits glvalues.

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 tamaño de un objeto de esa clase más cualquier relleno requerido para poner dicho objeto en una matriz.

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 Lvalue a rvalue, matriz a puntero, o función a puntero. La materialización temporal, sin embargo, (formalmente) se realiza para argumentos prvalue: sizeof determina el tamaño del objeto resultante. (desde C++17)

[editar] Palabra reservada

sizeof

[editar] Ejemplo

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

#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 << "tamaño de clase vacía: "              << sizeof e          << '\n'
              << "tamaño de puntero: "                  << sizeof &e         << '\n'
//            << "tamaño de función: "                 << sizeof(void())    << '\n'  // error
//            << "tamaño de tipo incompleto: "          << sizeof(int[])     << '\n'  // error
//            << "tamaño de un campo de bits: "                << sizeof bit.bit    << '\n'  // error
              << "tamaño de una matriz de 10 int: "          << sizeof(int[10])   << '\n'
              << "tamaño de una matriz de 10 int (2): "      << sizeof a          << '\n'
              << "longitud de una matriz de 10 int: "        << ((sizeof a) / (sizeof *a)) << '\n'
              << "longitud de una matriz de 10 int (2): "    << ((sizeof a) / (sizeof a[0])) << '\n'
              << "tamaño de Derived: "              << sizeof d          << '\n'
              << "tamaño de Derived a través de Base: " << sizeof b          << '\n';
 
}

Posible salida:

tamaño de clase vacía: 1
tamaño de puntero: 8
tamaño de una matriz de 10 int: 40
tamaño de una matriz de 10 int (2): 40
longitud de una matriz de 10 int: 10
longitud de una matriz de 10 int (2): 10
tamaño de Derived: 8
tamaño de Derived a través de Base: 4

[editar] Ver también

Documentacion C de sizeof