この表は、割り当てのオーバーロードはクラスではなく構造体に対してのみ可能であることを示しています。これは私を驚かせます。A = B無害の構文糖ではありませんか? 構造体に制限する設計上の根拠は何ですか?
3 に答える
8
D では、クラスは参照によって使用されます。したがって、A = B を実行すると、オブジェクト自体はコピーされず、そのオブジェクトへの参照だけがコピーされます。
プロセス中に変更されるオブジェクトはありません。したがって、それらに対して opAssign を定義しても意味がありません。
于 2011-12-06T23:12:30.710 に答える
4
D クラスには参照セマンティクスがあります。オブジェクトのコピーを取得する方法が必要な場合 (と考えられます)、標準または従来の方法は、.dupプロパティを提供することです。
于 2011-12-07T02:54:03.797 に答える
0
私はバグを報告し、そうしました。一般的なルールは、D プログラミング言語、DMD 実装、Web サイトです。私は 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 に答える