c++ - TYPE_ALIGNMENT() 失败的示例

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

最佳答案

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

来自 C++ 标准 (18.1/5):

The macro offsetof accepts a restricted set of type arguments in this International Standard. type shall be a POD structure or a POD union.

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

关于c++ - TYPE_ALIGNMENT() 失败的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2537947/

相关文章:

c++ - 关于c++中 vector push_back()的问题,我不知道如何在()里面填充

c++ - 无法确定为什么函数调用中从 char* 到 char 的无效转换

c++ - 无法从 txt 文件读取整数到 vector

c - 最后输入特定字符串-c程序

c++ - 如何在C++中的字符串中每N个字符插入一个字符

c++ - 计算CRC的C程序

python - 从 python 调用 c 程序时将数组传递给子进程模块的问题

arrays - 为了在 Matlab 中预分配内存,我想初始化我的对象数组。我该怎么做呢?

ios - 由于存储在文档目录中的大量图像,应用程序正在接收内存警告。应用程序崩溃了

c - 使用 mexMakeMemoryPersistent 调用 MEX 文件时,变量如何在后续调用中重新分配其指针?