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 { // Foo2 成员的定义... }; 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++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
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)
|
指定该变量的存储应该按指定量对齐 (specifier) |
(C++11) |
获取类型的对齐要求 (类模板) |
_Alignof , alignof 运算符的 C 文档 |