c++ - 结构中的最后一个成员类型为 T[1] 而不是 T*

标签 c++

<分区>

我在我工作的项目中看到了下一个代码:

struct Str
{
    size_t count;
    T data[1];
};

Str* str = (Str*)malloc(sizeof(Str) + sizeof(T) * count);
str->count = count
...

str->data 被用作一个数组,其中包含 Tcount 个元素。

为什么要声明 T data[1] 而不是 T* data?这样做有什么好处吗?

最佳答案

您的代码不是有效的 C++。

但是,它在某种程度上是有效的 C。在 C 中编写它的标准方法是将最终成员声明为 T data[];(“灵活长度数组”),目的是允许您分配一个动态 block 内存并将固定 header 和可变长度数组一起存储在其中。

使用这种类型有几个限制(例如,它不能是自动变量或数组元素的类型)。参见示例 the GCC implementation ,它提供了几个非标准扩展。

关于c++ - 结构中的最后一个成员类型为 T[1] 而不是 T*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20213763/

相关文章:

c++ - 如何在 Ubuntu 中使用 cmake 设置 qt4?

c++ - 如何让 gdb 告诉我给定地址的内存特征

c++ - SDL 和绑定(bind)缓冲区

c++ - 除了 createfile 和 openfile 之外,还有任何用于获取文件句柄的 Windows API?

c++ - 如果用户将字母作为输入,则重新输入年龄

c++ - 如何将静态库或共享库链接到内核模块?

c# - Direct2D 模糊渲染

c++ - OpenCL中的cuda中是否有类似原子操作的东西

c++ - 使用 iostream 根据用户的区域设置格式化数字的高效方法?

c++ - GNU gdb 无法进入模板函数(OS X Mavericks)