【发布时间】:2012-01-14 12:55:59
【问题描述】:
This table 表示 assignment overloading 仅适用于结构,而不适用于类。这让我很惊讶。 A = B 的语法糖不是无害的吗?将其限制为结构的设计原理是什么?
【问题讨论】:
标签: operator-overloading d assignment-operator design-rationale
This table 表示 assignment overloading 仅适用于结构,而不适用于类。这让我很惊讶。 A = B 的语法糖不是无害的吗?将其限制为结构的设计原理是什么?
【问题讨论】:
标签: operator-overloading d assignment-operator design-rationale
D 类具有引用语义。如果您想要一种获取对象副本的方法(它认为),标准或常规的做法是提供 .dup 属性。
【讨论】:
.dup 将是一种常见的方法,如果我们做决定一个实际的标准,那么这将是可能的选择。
dup 或 clone,但只有数组具有内置的 dup 属性。任何其他类型都必须有一个用户定义的类型。
我会提交一个错误,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);
}
【讨论】:
在 D 中,类是通过引用使用的。因此,当您执行 A = B 时,您不会复制对象本身,而只是对该对象的引用。
在此过程中没有对象被修改。所以为这些定义 opAssign 是没有意义的。
【讨论】: