是否存在占用 0 字节的 C++ 类型

2023-11-25

我试图声明一个占用零字节的 C++ 变量。它在一个联合体中,我从 int[0] 类型开始。我不知道这是否实际上是零字节(尽管 sizeof(int[0]) 是 0)。我需要一种更好的方法来声明 0 字节类型,并且希望可以将其类型定义为 nullType 或emptyType 之类的类型。该变量位于联合中,因此最终无论如何都会保留内存。我尝试了 void ,希望它能起作用,但 C++ 抱怨了。我使用的是 Ubuntu 10.10,带有当前版本的内核和最新的 GCC。 这是工会:

union RandomArgumentTypesFirst
{
    uint uintVal;
    nullType nullVal;
}

这是 typedef:

typedef int[0] nullType;

编译器对于 typedef 是这么说的:

error: variable or field ‘nullVal’ declared voidmake[2]:

当我输入时int[0], 有效。有什么建议么?

编辑: 正如@fefe 在评论中所说,int[0]可以由编译器作为扩展提供。 GCC的网站说编译器默认有很多扩展。


typedef 拼写错误:

typedef int nullType[0];

正如其他人指出的那样,你不能拥有大小为 0 的对象;然而,编译器可以(并且经常)提供Empty Base Class优化。

  • http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Empty_Base_Optimization
  • http://www.cantrip.org/emptyopt.html(“空会员”优化)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否存在占用 0 字节的 C++ 类型 的相关文章

随机推荐