TYPE_ALIGNMENT()失败的示例

时间:2010-03-29 12:51:23

标签: c++ c memory-management alignment

我有一个与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类型而失败。有人可以给我一个代码示例吗?

1 个答案:

答案 0 :(得分:3)

offsetof仅指定用于POD类型。如果一个类包含任何非POD的数据成员,则该类本身不是POD。因此,如果您的示例中的t是非POD类型,则无法保证其正常工作。

从C ++标准(18.1 / 5):

  

offsetof在本国际标准中接受一组受限制的type参数。 type应为POD结构或POD联合。

因此,如果您对非POD类型使用offsetof,则结果未定义。