Оператор alignof (начиная с C++11)
Материал из cppreference.com
Запрашивает требования по выравниванию для указанного типа
Содержание |
[править] Синтаксис
alignof( идентификатор-типа )
|
|||||||||
Возвращает значение типа std::size_t.
[править] Объяснение
Возвращает выравнивание, в байтах, необходимое для любого экземпляра типа, указанного в идентификаторе типа, который является либо полным типом объекта, либо типом массива, тип элемента которого является полным, либо ссылочным типом на один из этих типов.
Если тип является ссылочным, оператор возвращает выравнивание ссылочного типа; если тип является типом массива, возвращается требование выравнивания для типа элемента.
[править] Ключевые слова
[править] Примечание
Смотрите выравнивание, чтобы узнать о значении и свойствах значения, возвращаемого 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)
|
указывает, что хранилище для переменной должно быть выровнено на определённую величину |
(C++11) |
получает требования к выравниванию типа (шаблон класса) |
Документация C по _Alignof
|