std::meta::size_of
De es.cppreference.net
| Definido en el encabezado <meta>
|
||
consteval std::size_t size_of( std::meta::info r );
|
(desde C++26) | |
Devuelve el tamaño del tipo o (sub)objeto representado por r.
Parámetros
| r | - | un valor de reflexión |
Valor de retorno
Si r representa un tipo “referencia a T”, devuelve sizeof(T*).
De lo contrario, si r representa un tipo U, devuelve sizeof(U).
De lo contrario, equivalente a std::meta::size_of(std::meta::type_of(r)).
Excepciones
Lanza std::meta::exception a menos que se cumplan todas las siguientes condiciones:
std::meta::dealias(r)representa uno de los siguientes:
- tipo
- objeto
- valor (escalar)
- variable de tipo no referencia
- miembro de datos no estático que no sea un campo de bits
- relación de clase base directa
- descripción de miembro de datos cuyo ancho de bits es ⊥
- Si
std::meta::dealias(r)representa un tipo,std::meta::is_complete_type(r)estrue.
Notas
Esta función trata “referencia a T” igual que “puntero a T”. Esto coincide con la representación de los miembros de referencia no estáticos.
El resultado es distinto de cero incluso si r representa una relación de clase base directa de una clase base vacía.
Ejemplo
Ejecutar este código
#include <meta>
static_assert(std::meta::size_of(^^int) == sizeof(int));
static_assert(std::meta::size_of(^^int*) == sizeof(int*));
consteval bool test()
{
struct A;
// constexpr auto _ = std::meta::size_of(^^A);
// error: uncaught exception of type 'std::meta::exception';
// 'what()': 'reflection with incomplete type in size_of'
return true;
}
static_assert(test());
struct B { int i, j; };
static_assert(sizeof(B) == std::meta::size_of(^^B));
template<class T>
struct C { T m; };
static_assert(size_of(^^C<char>) == sizeof(char));
struct D { int x : 015; };
static_assert(size_of(^^D) == sizeof(int));
// static_assert(size_of(^^D::x) == sizeof(int));
// error: uncaught exception of type 'std::meta::exception';
// 'what()': 'reflection not suitable for size_of'
int main() {}
Véase también
(C++26) |
devuelve la alineación del objeto o tipo reflejado (función) |
(C++26) |
devuelve el tamaño en bits del objeto o tipo reflejado (función) |