std::alignment_of
Определён в заголовке <type_traits> | ||
|---|---|---|
template< class T > struct alignment_of; | (начиная с C++11) |
Предоставляет константу-член value, равную требованию к выравниванию типа T, как если бы она была получена с помощью выражения alignof. Если T является типом массива, возвращает требования к выравниванию типа элемента. Если T является ссылочным типом, возвращает требования к выравниванию типа, на который он ссылается.
Если alignof(T) не является допустимым выражением, поведение не определено.
Если программа добавляет специализации для std::alignment_of или std::alignment_of_v(начиная с C++17), поведение не определено.
Вспомогательный шаблон переменной
template< class T > constexpr std::size_t alignment_of_v = alignment_of<T>::value; | (начиная с C++17) |
Унаследовано от std::integral_constant
Константы-члены
|
value
[static] |
alignof(T) (открытая статическая константа-член) |
Функции-члены
|
operator std::size_t | преобразует объект в std::size_t, возвращает value (открытая функция-член) |
|
operator()
(C++14) | возвращает value (открытая функция-член) |
Типы-члены
| Тип | Определение |
|---|---|
value_type | std::size_t |
type | std::integral_constant<std::size_t,value> |
Возможная реализация
template<class T>
struct alignment_of : std::integral_constant<std::size_t, alignof(T)> {};
|
Примечания
Этот типовой признак появился до ключевого слова alignof, с помощью которого можно получить то же значение более кратко.
Пример
#include <cstdint>
#include <iostream>
#include <type_traits>
struct A {};
struct B
{
std::int8_t p;
std::int16_t q;
};
int main()
{
std::cout << std::alignment_of<A>::value << ' ';
std::cout << std::alignment_of<B>::value << ' ';
std::cout << std::alignment_of<int>() << ' '; // alt syntax
std::cout << std::alignment_of_v<double> << '\n'; // c++17 alt syntax
}
Возможный вывод:
1 2 4 8
См. также
alignof (C++11) | запрашивает требования к выравниванию типа (оператор) |
alignas (C++11) | указывает, что память для переменной должна быть выровнена на заданную величину (спецификатор) |
|
(начиная с C++11)(устарело в C++23) | определяет тип, подходящий для использования в качестве неинициализированного хранилища для типов заданного размера (шаблон класса) |
|
(начиная с C++11)(устарело в C++23) | определяет тип, подходящий для использования в качестве неинициализированного хранилища для всех заданных типов (шаблон класса) |
|
(C++11) | тривиальный тип с требованием к выравниванию не меньшим, чем у любого другого скалярного типа (определение типа) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/types/alignment_of