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 回答