为什么opAssign不能为类重载?

时间:2011-12-06 22:57:25

标签: operator-overloading d assignment-operator design-rationale

This tableassignment overloading只适用于结构,而不是类。这让我感到惊讶。 A = B的句法糖不是无害的吗?将其限制为结构的设计理由是什么?

3 个答案:

答案 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);
}
相关问题