Spec-Zone.ru › C++

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) указывает, что хранилище для переменной должно быть выровнено на определенный размер
aligned_storage
(C++11)(устарело в C++23)
определяет тип, подходящий для использования в качестве неинициализированного хранилища для типов заданного размера
(шаблон класса)
aligned_union
(C++11)(устарело в C++23)
определяет тип, подходящий для использования в качестве неинициализированного хранилища для всех заданных типов
(шаблон класса)
max_align_t
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API