2
unittest
{
  immutable float a = 1.1, b = 1.2;
  auto c1 = complex(a,b);
  auto r1 = c1 + c1;  //  error, not mutable
}

つまり、 を持つことはできますがComplex!(immutable float)、そのopBinary関数を の別のインスタンスに対して使用することはできませんComplex!(immutable float)。では、なぜ std.complex がそのように実装されているのでしょうか?

これがopBinaryです。を呼び出しますがopOpAssign、これは では機能しないimmutableため、エラーが発生します。

Complex!(CommonType!(T,R)) opBinary(string op, R)(Complex!R z) const
{
    alias typeof(return) C;
    auto w = C(this.re, this.im);
    return w.opOpAssign!(op)(z);
}
4

1 に答える 1

3

私はそれがバグだと思います。確かに、バグでなければ設計が悪い。しかし、 のコードとその量を見るopOpAssignと、彼らはコードの重複を避けようとしていて、彼らが行っていたことがimmutable. バグとして報告することをお勧めします。

于 2012-10-05T22:38:52.997 に答える