对齐首先是类型的属性。
可以用alignas
;覆盖它的类型。alignas
也可用于为特定对象分配新的对齐值。
因此,这两个示例都是有效的,并且将具有您假定的语义。
[n3290: 3.11/1]:
对象类型具有对齐要求(3.9.1、3.9.2),这些要求限制了可以分配该类型对象的地址。对齐是实现定义的整数值,表示可以分配给定对象的连续地址之间的字节数。对象类型对该类型的每个对象都有对齐要求;
可以使用对齐说明符(7.6.2)请求更严格的对齐。
[n3290: 7.6.2/1]:
对齐说明符可以应用于变量或类数据成员,但不应应用于位字段、函数参数、catch 子句 (15.3) 的形式参数或使用register
存储类说明符。对齐说明符也可以应用于类或枚举类型的声明。
带有省略号的对齐说明符是包扩展 (14.5.3)。
[n3290: 7.6.2/2]:
当对齐说明符的形式为
alignas( assignment-expression ):
- 赋值表达式应该是一个整数常量表达式
- 如果常量表达式计算为基本对齐,则声明实体的对齐要求应为指定的基本对齐
- 如果常量表达式计算为扩展对齐并且实现在声明的上下文中支持该对齐,则声明实体的对齐应为该对齐
- 如果常量表达式的计算结果为扩展对齐并且实现在声明的上下文中不支持该对齐,则程序格式错误
- 如果常量表达式的计算结果为零,则对齐说明符将无效
- 否则,程序格式错误。