Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
该表表明,赋值重载仅适用于结构,而不适用于类。这让我很惊讶。句法糖不是A = B无害的吗?将其限制为结构的设计原理是什么?
A = B
在 D 中,类是通过引用使用的。因此,当您执行 A = B 时,您不会复制对象本身,而只是对该对象的引用。
在此过程中不会修改任何对象。所以为那些定义 opAssign 是没有意义的。
D 类具有引用语义。如果您想要一种获取对象副本的方法(它认为),标准或常规的做法是提供一个.dup属性。
.dup
我会提交一个错误,并做到了。一般规则是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); }