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 >
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)
тривиальный тип с требованием к выравниванию не меньшим, чем у любого другого скалярного типа
(определение типа)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/types/alignment_of

Spec-Zone.ru

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