alignof
运算符 (自 C++11 起)
来自 cppreference.com
查询类型的对齐要求。
目录 |
[编辑] 语法
alignof( 类型标识符 ) |
|||||||||
返回 std::size_t 类型的值。
[编辑] 说明
返回 类型标识符 所指示类型的任何实例所需的对齐(以字节为单位),该类型标识符可以是完整对象类型、元素类型完整的数组类型或对其中一种类型的引用类型。
如果类型是引用类型,则运算符返回被引用类型的对齐;如果类型是数组类型,则返回元素类型的对齐要求。
[编辑] 注意
有关 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++ 标准。
DR | 应用于 | 发布时的行为 | 正确的行为 |
---|---|---|---|
CWG 1305 | C++11 | 类型标识符 不能表示对未知边界但元素类型完整的数组的引用 允许 |
允许 |
[编辑] 参考
- C++23 标准 (ISO/IEC 14882:2024)
- 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]
[编辑] 另请参阅
对齐要求 | 限制可以分配对象的地址 |
alignas 说明符(C++11) |
指定变量的存储应按特定数量对齐 |
(C++11) |
获取类型的对齐要求 (类模板) |
C 文档 关于 _Alignof
|