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 > inline 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) | тривиальный тип с требованием выравнивания, равным любому другому скалярному типу (typedef) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/types/alignment_of