我有一个与C / C ++中的对齐有关的问题。在 Determining the alignment of C/C++ structures in relation to its members Michael Burr发布了这个宏:
#define TYPE_ALIGNMENT( t ) offsetof( struct { char x; t test; }, test )
在有人写的评论中,这可能会因非POD类型而失败。有人可以给我一个代码示例吗?
答案 0 :(得分:3)
offsetof
仅指定用于POD类型。如果一个类包含任何非POD的数据成员,则该类本身不是POD。因此,如果您的示例中的t
是非POD类型,则无法保证其正常工作。
从C ++标准(18.1 / 5):
宏
offsetof
在本国际标准中接受一组受限制的type
参数。type
应为POD结构或POD联合。
因此,如果您对非POD类型使用offsetof
,则结果未定义。