Espacios de nombres
Variantes
Acciones

offsetof

De cppreference.com
< cpp‎ | types
 
 
Biblioteca de servicios
 
Apoyo de tipos
Tipos básicos
Tipos fundamentales
Tipos enteros de anchura fija(C++11)
(C++11)
offsetof
Límites numéricos
Interfaz de C de límites numéricos
Información de tipo
en tiempo de ejecución
Rasgos de tipos
Categorías de tipos
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Propiedades de tipos
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(hasta C++20)
(C++11)(en desuso en C++20)
(C++11)
Constantes de rasgos de tipos
Metafunciones
(C++17)
Contexto de evaluación constante
Operaciones soportadas
Relaciones y consultas de propiedades
Modificaciones de tipos
Transformaciones de tipos
(C++11)
(C++11)
(C++17)
(C++11)(hasta C++20)(C++17)
 
Definido en el archivo de encabezado <cstddef>
#define offsetof(tipo, miembro) /*definido por la implementación*/

La macro offsetof se expande a una expresión constante entera de tipo std::size_t, cuyo valor es el desplazamiento, en bytes, desde el inicio del objeto de un tipo especificado a su miembro especificado, incluyendo relleno, si es que lo hay.

Si tipo no es un tipo con diseño estándar, el comportamiento está indefinido(hasta C++17)el uso de la macro offsetof se soporta condicionalmente(desde C++17).

Si miembro es un miembro estático o una función miembro, el comportamiento está indefinido.

El desplazamiento del primer miembro de un tipo con diseño estándar siempre es cero (la optimización de base vacía es obligatoria).

La expresión offsetof(tipo, miembro) nunca es dependiente del tipo y es dependiente del valor si y solo si tipo es dependiente.

Contenido

[editar]Excepciones

offsetof no lanza excepciones; la expresión noexcept(offsetof(tipo, miembro)) siempre se evalúa a true.

[editar]Notas

offsetof no puede implementarse en C++ estándar y requiere soporte del compilador: GCC, LLVM

[editar]Ejemplo

#include <iostream>#include <cstddef>struct S {char c;double d;};int main(){std::cout<<"el primer elemento se encuentra en el desplazamiento "<< offsetof(S, c)<<'\n'<<"el double se encuentra en el desplazamiento "<< offsetof(S, d)<<'\n';}

Posible salida:

el primer elemento se encuentra en el desplazamiento 0 el double se encuentra en el desplazamiento 8

[editar]Véase también

Tipo entero sin signo devuelto por el operador sizeof.
(typedef)[editar]
Comprueba si un tipo es un tipo de diseño estándar.
(plantilla de clase)[editar]
Documentación de C para offsetof
close