Map D中关联数组的常数

Map D中关联数组的常数,map,constants,d,associative-array,pass-by-value,Map,Constants,D,Associative Array,Pass By Value,据我所知,D中的映射具有值语义 如果是,为什么本例中的第二行失败 const(uint[ubyte]) x; uint[ubyte] y = x; 作为 当键和值都具有值语义时 据我所知,D中的映射具有值语义 关联数组是引用类型 在内部,它们表示为指向实现定义的数据结构的指针。(请注意,如果AA是null,它的行为与引用类型不同,因为添加第一个成员将实例化它。)Hmm,我一定是在值语义测试中弄错了自己。现在我必须把我所有的x=y更改为x=y.dup。现在自然的问题变成了;是否有一种特性可以检查

据我所知,D中的映射具有值语义

如果是,为什么本例中的第二行失败

const(uint[ubyte]) x;
uint[ubyte] y = x;
作为

当键和值都具有值语义时

据我所知,D中的映射具有值语义

关联数组是引用类型


在内部,它们表示为指向实现定义的数据结构的指针。(请注意,如果AA是
null
,它的行为与引用类型不同,因为添加第一个成员将实例化它。)

Hmm,我一定是在值语义测试中弄错了自己。现在我必须把我所有的
x=y
更改为
x=y.dup
。现在自然的问题变成了;是否有一种特性可以检查一个类型是否具有值语义或引用语义?在Phobos中是否有一些实用功能总是创建一个类型的新副本(静态、动态和关联数组)?我相信在我的模板中使用.dup,因为当x和y都是静态数组(大小相同)时,执行
y=x.dup
,并不能做正确的事情;它会在两者之间创建一个不必要的动态数组副本,对吗?或者DMD是否聪明到足以优化动态数组?另请参见:我认为,
.dup
拷贝从未优化过<但是,code>.idup针对已经不可变的数组进行了优化。
Error: cannot implicitly convert expression (x) of type const(uint[ubyte]) to uint[ubyte]