根据docs:
您可能希望直接使用VariantN,使用不同的最大大小[来自Variant]来存储更大的类型,或者用于保存内存。
我认为这意味着Variant
不接受大型结构,但以下通过:
struct S {
long[2048] vals;
}
static assert(Variant.allowed!S);
那么当我在标准S
中粘贴像Variant
这样的大型类型时会发生什么?
S
会自动加框吗?
答案 0 :(得分:3)
请注意,allowed
仅检查类型列表,而不是大小。
但是有了很大的东西,它会被复制到堆中:variant.d的第627行显示了源代码。如果尺寸适合商店,它就存储在这里。否则,将创建堆副本并存储指向该副本的指针。
所以是的,它基本上是根据需要装箱的。