C++ 类型_ALIGNMENT()失败的示例

C++ 类型_ALIGNMENT()失败的示例,c++,c,memory-management,alignment,C++,C,Memory Management,Alignment,我有一个关于C/C++中对齐的问题。在里面 Michael Burr发布了以下宏: #define TYPE_ALIGNMENT( t ) offsetof( struct { char x; t test; }, test ) 在有人写的评论中,非POD类型可能会失败。有人能给我一个失败的代码示例吗?offsetof仅用于POD类型。如果类包含任何非POD的数据成员,则该类本身不是POD。因此,如果示例中的t是非POD类型,则不能保证它工作 从C++标准(18.1/5): 宏offsetof

我有一个关于C/C++中对齐的问题。在里面 Michael Burr发布了以下宏:

#define TYPE_ALIGNMENT( t ) offsetof( struct { char x; t test; }, test )

在有人写的评论中,非POD类型可能会失败。有人能给我一个失败的代码示例吗?

offsetof
仅用于POD类型。如果类包含任何非POD的数据成员,则该类本身不是POD。因此,如果示例中的
t
是非POD类型,则不能保证它工作

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

offsetof
接受本国际标准中受限制的
类型
参数集<代码>类型应为吊舱结构或吊舱接头


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

offsetof
仅指定用于POD类型。如果类包含任何非POD的数据成员,则该类本身不是POD。因此,如果示例中的
t
是非POD类型,则不能保证它工作

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

offsetof
接受本国际标准中受限制的
类型
参数集<代码>类型应为吊舱结构或吊舱接头


因此,如果在非POD类型上使用
offsetof
,结果是未定义的。

是的,但这不是我所要求的。例如,类foo{int i;虚拟void bar(){};int main(){std::cout@JustMaximumPower:“工作正常”(或者,至少看起来工作正常)对于未定义的东西来说是合理的结果。“崩溃得可怕”是另一个合理的结果。任何事情都有可能发生。它是否有效或在您的软件中导致有害的错误完全取决于实现。假设它适用于非POD类型是不明智的。是的,但这不是我所要求的。例如类foo{int I;virtual void bar(){};int main(){std::cout@JustMaximumPower:“运行良好”(或者,至少看起来运行良好)对于未定义的内容是合理的结果。“崩溃得可怕”是另一个合理的结果。任何事情都有可能发生。它是否有效或导致软件中的有害错误完全取决于实现。假设它适用于非POD类型是不明智的。