alignof
运算符 (C++11 起)
来自 cppreference.cn
查询类型的对齐要求。
内容 |
[编辑] 语法
alignof( type-id ) |
|||||||||
返回 std::size_t 类型的值。
[编辑] 解释
返回 对齐,以字节为单位,type-id
指示的类型的任何实例所要求的对齐,type-id
或是完整对象类型,或是元素类型完整的数组类型,或是这些类型之一的引用类型。
如果类型是引用类型,则运算符返回被引用类型的对齐;如果类型是数组类型,则返回元素类型的对齐要求。
[编辑] 注解
有关 alignof
返回值的含义和属性,见对齐。
[编辑] 关键字
[编辑] 示例
运行此代码
#include <iostream> struct Foo { int i; float f; char c; }; // Note: alignas(alignof(long double)) below can be // simplified to alignas(long double) if desired. struct alignas(alignof(long double)) Foo2 { // put your definition here }; struct Empty {}; struct alignas(64) Empty64 {}; #define SHOW(expr) std::cout << #expr << " = " << (expr) << '\n' int main() { SHOW(alignof(char)); SHOW(alignof(int*)); SHOW(alignof(Foo)); SHOW(alignof(Foo2)); SHOW(alignof(Empty)); SHOW(alignof(Empty64)); }
可能的输出
alignof(char) = 1 alignof(int*) = 8 alignof(Foo) = 4 alignof(Foo2) = 16 alignof(Empty) = 1 alignof(Empty64) = 64
[编辑] 缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 已发布行为 | 正确行为 |
---|---|---|---|
CWG 1305 | C++11 | type-id 不能表示对具有未知边界但元素类型完整的数组的引用 但元素类型完整的数组 |
允许 |
[编辑] 参考
- 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 , alignof 运算符 |