3

该表表明,赋值重载仅适用于结构,而不适用于类。这让我很惊讶。句法糖不是A = B无害的吗?将其限制为结构的设计原理是什么?

4

3 回答 3

8

在 D 中,类是通过引用使用的。因此,当您执行 A = B 时,您不会复制对象本身,而只是对该对象的引用。

在此过程中不会修改任何对象。所以为那些定义 opAssign 是没有意义的。

于 2011-12-06T23:12:30.710 回答
4

D 类具有引用语义。如果您想要一种获取对象副本的方法(它认为),标准或常规的做法是提供一个.dup属性。

于 2011-12-07T02:54:03.797 回答
0

我会提交一个错误,并做到了。一般规则是D 编程语言、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);
}
于 2011-12-07T04:42:07.713 回答