Namespaces
Variants

std:: alignment_of

From cppreference.net
Metaprogramming library
Type traits
Type categories
(C++11)
(C++11) ( DR* )
Type properties
(C++11)
(C++11)
(C++14)
(C++11) (deprecated in C++26)
(C++11) ( until C++20* )
(C++11) (deprecated in C++20)
(C++11)
Type trait constants
Metafunctions
(C++17)
Supported operations
Relationships and property queries
(C++11)
alignment_of
(C++11)
(C++11)
(C++11)
Type modifications
Type transformations
(C++11) (deprecated in C++23)
(C++11) (deprecated in C++23)
(C++11)
(C++11) ( until C++20* ) (C++17)

Compile-time rational arithmetic
Compile-time integer sequences
Определено в заголовочном файле <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>() << ' '; // альтернативный синтаксис
    std::cout << std::alignment_of_v<double> << '\n'; // альтернативный синтаксис C++17
}

Возможный вывод:

1 2 4 8

Смотрите также

alignof (C++11) запрашивает требования к выравниванию типа
(оператор)
alignas (C++11) указывает, что память для переменной должна быть выровнена на определенное значение
(спецификатор)
(since C++11) (deprecated in C++23)
определяет тип, подходящий для использования в качестве неинициализированного хранилища для типов заданного размера
(шаблон класса)
(since C++11) (deprecated in C++23)
определяет тип, подходящий для использования в качестве неинициализированного хранилища для всех заданных типов
(шаблон класса)
тривиальный тип с требованием выравнивания таким же большим, как у любого другого скалярного типа
(typedef)