std::meta::size_of
Aus de.cppreference.net
| Definiert in Header <meta>
|
||
consteval std::size_t size_of( std::meta::info r );
|
(seit C++26) | |
Gibt die Größe des durch r dargestellten Typs oder (Unter)objekts zurück.
Parameter
| r | - | ein Reflexionswert |
Rückgabewert
Falls r einen Typ „Referenz auf T“ repräsentiert, wird sizeof(T*) zurückgegeben.
Andernfalls, falls r einen Typ U repräsentiert, wird sizeof(U) zurückgegeben.
Andernfalls äquivalent zu std::meta::size_of(std::meta::type_of(r)).
Ausnahmen
Wirft std::meta::exception, sofern nicht alle der folgenden Bedingungen erfüllt sind:
std::meta::dealias(r)repräsentiert eines der folgenden:
- Typ
- Objekt
- (skalarer) Wert
- Variable von Nicht-Referenztyp
- Nicht-statisches Datenmember, das kein Bitfeld ist
- Direkte Basisklassenbeziehung
- Datenmemberbeschreibung, dessen Bitbreite ⊥ ist
- Falls
std::meta::dealias(r)einen Typ repräsentiert, iststd::meta::is_complete_type(r)true.
Hinweise
Diese Funktion behandelt „Referenz auf T“ genauso wie „Zeiger auf T“. Dies entspricht der Darstellung von nicht-statischen Referenzmembern.
Das Ergebnis ist selbst dann ungleich Null, wenn r eine direkte Basisklassenbeziehung einer leeren Basisklasse repräsentiert.
Beispiel
Diesen Code ausführen
#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() {}
Siehe auch
(C++26) |
gibt die Ausrichtung des reflektierten Objekts oder Typs zurück (Funktion) |
(C++26) |
gibt die Größe in Bits des reflektierten Objekts oder Typs zurück (Funktion) |