alignas specifier
C++11%29
指定对齐要求类型或对象的。
句法
alignas( expression ) | | |
---|---|---|
alignas( type-id ) | | |
alignas( pack ... ) | | |
1%29alignas(expression)
一定是积分常数表达式值等于零,或计算为对齐或者延伸的直线。
2%29相当于alignas(alignof(type))
3%29等效于应用于同一声明的多对齐作为说明符,每个成员对应于参数包,可以是类型参数包,也可以是非类型参数包。
解释
大alignas
说明符可以应用于变量或非位字段类数据成员的声明,也可以应用于类/结构/联合或枚举它不能应用于函数参数或CATCH子句的异常参数。
这种声明所声明的对象或类型将具有对齐要求等于所有非零表达式中最严格的%28最大%29非零表达式。alignas
声明中使用的说明符,除非它会削弱类型的自然对齐性。
如果最严格的%28最大%29alignas
在声明中,它比没有任何对齐的方法要弱。alignas
说明符%28,即比其自然对齐弱或弱于alignas
在另一个相同对象或类型%29的声明中,程序格式不正确:
二次
struct alignas(8) S {};
struct alignas(1) U { S s; }; // error: alignment of U would have been 8 without alignas(1)
二次
无效的非零对齐,如alignas(3)
都是畸形的。
比另一个弱的有效非零对齐alignas
在相同的声明中被忽略。
alignas(0)
总是被忽视。
注记
根据ISO C11标准,C语言具有_Alignas关键字和定义alignas作为预处理宏,扩展到标头中的关键字。<stdalign.h>,但在C++中,这是一个关键字,头<stdalign.h>和<cstdalign>不要定义这样的宏。但是,它们确实定义了宏常量。__alignas_is_defined...
关键词
alignas
...
例
二次
// every object of type sse_t will be aligned to 16-byte boundary
struct alignas(16) sse_t
{
float sse_data[4];
};
// the array "cacheline" will be aligned to 128-byte boundary
alignas(128) char cacheline[128];
二次
另见
alignof operator | queries alignment requirements of a type (since C++11) |
---|---|
alignment_of (C++11) | obtains the type's alignment requirements (class template) |
c文件[医]阿利格纳斯
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。