Пространства имён
Варианты
Действия

Оператор alignof (начиная с C++11)

Материал из cppreference.com
< cpp‎ | language
 
 
Язык С++
Общие темы
Управление потоком
Операторы условного выполнения
if
Операторы итерации (циклы)
Операторы перехода
Функции
Объявление функции
Выражение лямбда-функции
Спецификатор inline
Спецификации динамических исключений (до C++17*)
Спецификатор noexcept (C++11)
Исключения
Пространства имён
Типы
Спецификаторы
decltype (C++11)
auto (C++11)
alignas (C++11)
Спецификаторы длительности хранения
Инициализация
Выражения
Альтернативные представления
Литералы
Логические - Целочисленные - С плавающей запятой
Символьные - Строковые - nullptr (C++11)
Определяемые пользователем (C++11)
Утилиты
Атрибу��ы (C++11)
Types
Объявление typedef
Объявление псевдонима типа (C++11)
Casts
Неявные преобразования - Явные преобразования
static_cast - dynamic_cast
const_cast - reinterpret_cast
Выделение памяти
Классы
Свойства функции класса
explicit (C++11)
static
Специальные функции-элементы
Шаблоны
Разное
 
Выражения
Общие
Категории значений (lvalue, rvalue, xvalue)
Порядок оценки (точки последовательности)
Константные выражения
Потенциально оцениваемые выражения
Первичные выражения
Лямбда-выражения(C++11)
Литералы
Целочисленные литералы
Литералы с плавающей запятой
Логические литералы
Символьные литералы, включая управляющие последовательности
Строковые литералы
Литерал нулевого указателя(C++11)
Пользовательский литерал(C++11)
Операторы
a=b, a+=b, a-=b, a*=b, a/=b, a%=b, a&=b, a|=b, a^=b, a<<=b, a>>=b
++a, --a, a++, a--
+a, -a, a+b, a-b, a*b, a/b, a%b, ~a, a&b, a|b, a^b, a<<b, a>>b
a||b, a&&b, !a
a==b, a!=b, a<b, a>b, a<=b, a>=b, a<=>b (начиная с C++20)
a[b], *a, &a, a->b, a.b, a->*b, a.*b
a(...), a,b, a?b:c
выражение new
выражение delete
выражение throw
alignof
sizeof
sizeof...(C++11)
typeid
noexcept(C++11)
Выражения свёртки(C++17)
Альтернативные представления операторов
Приоритет и ассоциативность
Перегрузка операторов
Сравнение по умолчанию(C++20)
Преобразования
Неявные преобразования
Обычные арифметические преобразования
const_cast
static_cast
reinterpret_cast
dynamic_cast
Явные преобразования: (T)a, T(a), auto(a), auto{a} (начиная с C++23)
Пользовательское преобразование
 

Запрашивает требования по выравниванию для указанного типа

Содержание

[править] Синтаксис

alignof( идентификатор-типа )

Возвращает значение типа std::size_t.

[править] Объяснение

Возвращает выравнивание, в байтах, необходимое для любого экземпляра типа, указанного в идентификаторе типа, который является либо полным типом объекта, либо типом массива, тип элемента которого является полным, либо ссылочным типом на один из этих типов.

Если тип является ссылочным, оператор возвращает выравнивание ссылочного типа; если тип является типом массива, возвращается требование выравнивания для типа элемента.

[править] Ключевые слова

alignof

[править] Примечание

Смотрите выравнивание, чтобы узнать о значении и свойствах значения, возвращаемого alignof.

[править] Пример

#include <iostream>
 
struct Foo {
    int   i;
    float f;
    char  c;
};
 
// Примечание: `alignas(alignof(long double))` ниже при желании можно 
// упростить до простого `alignas(long double)`.
struct alignas(alignof(long double)) Foo2 {
    // поместите своё определение здесь
}; 
 
struct Empty {};
 
struct alignas(64) Empty64 {};
 
int main()
{
    std::cout << "Выравнивание"  "\n"
        "- символа          : " << alignof(char)    << "\n"
        "- указателя        : " << alignof(int*)    << "\n"
        "- класса Foo       : " << alignof(Foo)     << "\n"
        "- класса Foo2      : " << alignof(Foo2)    << "\n"
        "- пустого класса   : " << alignof(Empty)   << "\n"
        "- alignas(64) Empty: " << alignof(Empty64) << "\n";
}

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

Выравнивание
- символа          : 1
- указателя        : 8
- класса Foo       : 4
- класса Foo2      : 16
- пустого класса   : 1
- alignas(64) Empty: 64

[править] Смотрите также

требование выравнивания ограничивает адреса, по которым может быть размещён объект
спецификатор alignas(C++11) указывает, что хранилище для переменной должно быть выровнено на определённую величину[править]
получает требования к выравниванию типа
(шаблон класса) [править]