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 {}; int main() { std::cout << "对齐字节数" "\n" "- char :" << alignof(char) << "\n" "- 指针 :" << alignof(int*) << "\n" "- Foo 类 :" << alignof(Foo) << "\n" "- Foo2 类 :" << alignof(Foo2) << "\n" "- 空类 :" << alignof(Empty) << "\n" "- 带 alignas(64) 的空类:" << alignof(Empty64) << "\n"; }
可能的输出:
对齐字节数 - char :1 - 指针 :8 - Foo 类 :4 - Foo2 类 :16 - 空类 :1 - 带 alignas(64) 的空类:64
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
CWG 1305 | C++11 | 不能使用表示到元素类型完整但边界未知的数组的引用的 类型标识 | 可以使用 |
参阅
对齐要求 | 限制对象能分配到的地址 |
alignas 说明符(C++11)
|
指定该变量的存储应该按指定量对齐 |
(C++11) |
获取类型的对齐要求 (类模板) |