Namespaces
Variants

std::meta::size_of

Depuis fr.cppreference.net
< cpp | meta
 
 
 
Bibliothèque de réflexion
 
Types et requêtes de réflexion
Requêtes de réflexion
Requêtes de disposition de réflexion
Propriétés de type
Requêtes de propriété de type
 
Défini dans l'en-tête <meta>
consteval std::size_t size_of( std::meta::info r );
(depuis C++26) Retourne la taille du type ou (sous-)objet représenté par

. Sommairer1

-

une valeur de réflexion Valeur de retour Si

représente un type « référence vers

», retourne r. TSinon, si sizeof(T*) représente un type

, retourne r. USinon, équivalent à sizeof(U).

Exceptionsstd::meta::size_of(std::meta::type_of(r))Lance

std::meta::exception

sauf si toutes les conditions suivantes sont remplies : représente l'un des éléments suivants :

  • std::meta::dealias(r)type
  • représente un type, std::meta::dealias(r) est std::meta::is_complete_type(r).true Notes

Cette fonction traite « référence de

» de la même manière que « pointeur vers T ». Cela correspond à la représentation des membres référence non statiques. TLe résultat est non nul même si

représente une rrelation de classe de base directe d'une classe de base vide. Exemple

Exécuter ce code

#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() {}

alignment_of

retourne l'alignement de l'objet ou du type reflété
(fonction)
bit_size_of
retourne la taille en bits de l'objet ou du type reflété
(fonction)