我的任务是向一个班级解释一小段代码,并且想知道我的任何一点是不正确还是不准确。代码段如下:
std::tuple<int, float, char> ifc(3, 4.5f, 'c');
std::cout << std::get<0>(ifc);
std::cout << std::get<1>(ifc);
我写的关于代码的关键点是:
我还想扩展最后一点,因为我不太确定内存分配如何适用于元组。
任何输入都将非常感谢! :) 感谢
答案 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));