6.7.6 对齐说明符
语法
- 对齐说明符有两种形式:
c
alignas(type-name)
alignas(constant-expression)1
2
2
约束
alignas只能出现在:- 声明的声明说明符中;
- 成员声明的说明符-限定符列表中;
- 复合字面量的类型名中。
alignas不能与typedef或register一起使用。alignas不能用于函数声明,也不能用于位字段声明。常量表达式形式必须是整数常量表达式,其值必须是:
- 某个有效的基本对齐;
- 或实现支持的某个扩展对齐;
- 或
0。
不能把对象声明成某种实现不支持的过对齐类型。
一条声明里所有对齐说明符合起来的效果,不能比该类型本来要求的对齐更弱。
语义
alignas(type-name)等价于:
c
alignas(alignof(type-name))1
被声明对象或成员的对齐要求取为所指定对齐。
alignas(0)没有效果。若同一声明里出现多个
alignas,实际生效的是其中最严格的那个。若对象的定义带有对齐说明符,则它的其他声明要么不给对齐说明符,要么必须给出等价对齐。
若对象的定义没有对齐说明符,则它的其他声明也都不能带对齐说明符。
若不同翻译单元中同一对象的声明带了不同的对齐说明符,则行为未定义。