Оператор alignof (с C++11)
Запрашивает требования к выравниванию типа.
Синтаксис
alignof( type-id ) |
Возвращает значение типа std::size_t.
Объяснение
Возвращает выравнивание, в байтах, необходимое для любого экземпляра типа, указанного type-id, которое является либо полным типом объекта, типом массива, чье элементный тип является полным, либо типом ссылки на один из этих типов.
Если тип является типом ссылки, оператор возвращает выравнивание ссылаемого типа; если тип является типом массива, возвращается требование выравнивания элементного типа.
Примечания
См. выравнивание для значения и свойств значения, возвращаемого alignof.
Ключевые слова
Пример
#include <iostream>
struct Foo
{
int i;
float f;
char c;
};
// Note: `alignas(alignof(long double))` below can be simplified to simply
// `alignas(long double)` if desired.
struct alignas(alignof(long double)) Foo2
{
// put your definition here
};
struct Empty {};
struct alignas(64) Empty64 {};
int main()
{
std::cout << "Alignment of" "\n"
"- char : " << alignof(char) << "\n"
"- pointer : " << alignof(int*) << "\n"
"- class Foo : " << alignof(Foo) << "\n"
"- class Foo2 : " << alignof(Foo2) << "\n"
"- empty class : " << alignof(Empty) << "\n"
"- empty class\n"
" with alignas(64): " << alignof(Empty64) << "\n";
}Возможный вывод:
Alignment of - char : 1 - pointer : 8 - class Foo : 4 - class Foo2 : 16 - empty class : 1 - empty class with alignas(64): 64
Ссылки
- Стандарт C++23 (ISO/IEC 14882:2023):
- 7.6.2.6 Alignof [expr.alignof]
- Стандарт C++20 (ISO/IEC 14882:2020):
- 7.6.2.5 Alignof [expr.alignof]
- Стандарт C++17 (ISO/IEC 14882:2017):
- 8.3.6 Alignof [expr.alignof]
- Стандарт C++14 (ISO/IEC 14882:2014):
- 5.3.6 Alignof [expr.alignof]
- Стандарт C++11 (ISO/IEC 14882:2011):
- 5.3.6 Alignof [expr.alignof]
Отчеты об ошибках
Следующие отчеты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применено к | Поведение, как опубликовано | Правильное поведение |
|---|---|---|---|
| CWG 1305 | C++11 |
type-id не мог представлять ссылку на массив с неизвестной границей, но полным типом элемента | разрешено |
См. также
| требование выравнивания | ограничивает адреса, по которым может быть выделен объект |
alignas спецификатор(C++11) | указывает, что хранилище для переменной должно быть выровнено на определенное значение |
|
(C++11) | получает требования к выравниванию типа (шаблон класса) |
C документация для _Alignof |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/language/alignof