我怎样才能最好地向观众解释一个元组?

时间:2016-01-27 01:38:33

标签: c++ tuples

我的任务是向一个班级解释一小段代码,并且想知道我的任何一点是不正确还是不准确。代码段如下:

std::tuple<int, float, char> ifc(3, 4.5f, 'c');
std::cout << std::get<0>(ifc);
std::cout << std::get<1>(ifc);

我写的关于代码的关键点是:

  • 元组是可以容纳许多不同类型的对象,并且可以包含任意数量的元素。
  • Get函数返回元组给定索引处的值,非常类似于数组
  • 元组是在编译时定义的,因此它使用静态内存分配。这意味着在程序运行时为元组分配内存,并且它一直持续到程序退出。
  • 在内存分配期间,元组在运行时被推送到堆栈。当调用std :: get函数时,它会转到相关索引地址的堆栈并返回存储在那里的类型和值。

我还想扩展最后一点,因为我不太确定内存分配如何适用于元组。

任何输入都将非常感谢! :) 感谢

1 个答案:

答案 0 :(得分:2)

元组是一个数学概念,它是一个有限的有序元素列表

但是std::tuple不是对象,std::tuple是一种类型,实际上是模板化类型,它允许创建具有特定有序元素列表作为类型的特定类型。您可以将其视为一种使用匿名字段定义struct的方法,而不是通过名称引用它们,而是通过索引(这就是为什么必须对元组进行排序)。

std::tuple的内存分配大部分与同等struct完全相同。如果实例在堆栈上,则访问该字段等同于获取元组的地址并将字段的偏移量添加到它(在编译时已知)。这将是一种:

struct Tuple {
  int a;
  char b;
  double c;
};

Tuple t = Tuple{1,'a',1.0};
assert(&t.c == &t + offsetof(Tuple, c));