以 C++ 数据结构存储多种数据类型

Store multiple data types in c++ data structure

本文关键字:数据类型 存储 C++ 数据结构      更新时间:2023-10-16

我正在为一种编程语言制作解释器,并且正在研究堆栈,但是我无法为可以包含多种数据类型的动态结构找到简单的解决方案。 我需要能够在结构中存储多种数据类型,例如整数、长整型、字符串等。

构建这种数据结构的一种相对简单的方法是使用 union ,如下所示:

union AnyType {
    int int_val;
    long long long_val;
    float float_val;
    double int_val;
    char char_val;
    char *char_prt;
};

但是,这可能不是最经济的,因为此结构的大小等于最大数据类型的大小。更好的方法是为堆栈使用"原始"内存块,将其部分动态处理给堆栈上的元素。但是,您需要注意数据的对齐方式,以避免将多字节数据放在偏移处,从而使访问速度变慢或导致运行时错误。

您可以使用联合:

union someUnion
{
  int a;
  long int b;
  char *string;
  //...any other needed type 
}

有关详细信息,请查看此链接。Union 通常用于解释器和编译器的实现,例如在 yacc(野牛)和 lex 中。顺便说一句,您可以检查它们,这些可以大大简化解释器的编码。