具有大类型的std.variant的行为

时间:2015-04-07 03:14:35

标签: d variant

根据docs

  

您可能希望直接使用VariantN,使用不同的最大大小[来自Variant]来存储更大的类型,或者用于保存内存。

我认为这意味着Variant不接受大型结构,但以下通过:

struct S {
  long[2048] vals;
}

static assert(Variant.allowed!S);

那么当我在标准S中粘贴像Variant这样的大型类型时会发生什么? S会自动加框吗?

1 个答案:

答案 0 :(得分:3)

请注意,allowed仅检查类型列表,而不是大小。

但是有了很大的东西,它会被复制到堆中:variant.d的第627行显示了源代码。如果尺寸适合商店,它就存储在这里。否则,将创建堆副本并存储指向该副本的指针。

所以是的,它基本上是根据需要装箱的。