This table说assignment overloading只适用于结构,而不是类。这让我感到惊讶。 A = B
的句法糖不是无害的吗?将其限制为结构的设计理由是什么?
答案 0 :(得分:8)
在D中,类通过引用使用。因此,当您执行A = B时,您不会复制对象本身,而只是复制该对象的引用。
在此过程中没有任何对象被修改。因此,为thoses定义opAssign是没有意义的。
答案 1 :(得分:4)
D类具有引用语义。如果你想要一种方法来获得对象的副本(它认为),标准或传统的事情是提供.dup
属性。
答案 2 :(得分:0)
我会提交一个错误and did。一般规则是The D Programming Language,DMD实施,网站。因为我没有TDPL方便,所以我将继续实施。
class A {
int a;
string b;
float c;
void opAssign(B b) {
a = b.a;
}
}
class B {
int a;
}
void main()
{
auto a = new A();
a.a = 5;
auto b = new B();
b.a = 10;
a = b;
assert(a.a == 10);
}