std::meta::size_of
Определено в заголовочном файле <meta> | ||
|---|---|---|
consteval std::size_t size_of( std::meta::info r ); | (начиная с C++26) |
Возвращает размер типа или объекта (подобъекта), представленного r.
Параметры
| r | - | значение отражения |
Возвращаемое значение
Если r представляет тип «ссылка на T», возвращает sizeof(T*).
В противном случае, если r представляет тип U, возвращает sizeof(U).
В противном случае эквивалентно std::meta::size_of(std::meta::type_of(r)).
Исключения
Выбрасывает std::meta::exception, если не выполняются все следующие условия:
-
std::meta::dealias(r)представляет одно из следующего: - тип
- объект
- значение (скалярного типа)
- переменную нереференсного типа
- нестатический член данных, не являющийся битовым полем
- отношение прямого базового класса
- описание члена данных, ширина битового поля которого равна ⊥
- Если
std::meta::dealias(r)представляет тип,std::meta::is_complete_type(r)равноtrue.
Примечания
Эта функция рассматривает «ссылку на T» так же, как «указатель на T». Это соответствует представлению нестатических членов-ссылок.
Результат отличен от нуля, даже если r представляет отношение прямого базового класса для пустого базового класса.
Пример
#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() {}
См. также
|
(C++26) | возвращает выравнивание отражённого объекта или типа (функция) |
|
(C++26) | возвращает размер отражённого объекта или типа в битах (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/meta/size_of