Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在c+中存储多种数据类型+;数据结构_C++_Stack - Fatal编程技术网

C++ 在c+中存储多种数据类型+;数据结构

C++ 在c+中存储多种数据类型+;数据结构,c++,stack,C++,Stack,我正在为一种编程语言制作一个解释器,我正在研究堆栈,但是我还没有找到一个简单的解决方案来解决动态结构,它可以包含多种数据类型。我需要能够在结构中存储多种数据类型,例如int、long、string等。您可以使用union: union someUnion { int a; long int b; char *string; //...any other needed type } 看一看细节。Union通常用于解释器和编译器的实现,例如在yacc(bison)和lex中。顺便

我正在为一种编程语言制作一个解释器,我正在研究堆栈,但是我还没有找到一个简单的解决方案来解决动态结构,它可以包含多种数据类型。我需要能够在结构中存储多种数据类型,例如int、long、string等。

您可以使用union:

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

看一看细节。Union通常用于解释器和编译器的实现,例如在yacc(bison)和lex中。顺便说一句,您可以检查它们,它们可以大大简化解释器的编码。

构建此类数据结构的一种相对简单的方法是使用
联合,如下所示:

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

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

您可能想了解联合。或者可能。我如何使用多类型简单、变量
union someVar接受
int
long int
char*
等。