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);
}
答案 0 :(得分:3)
我会说这是一个错误。当然,如果它不是一个bug,那就是一个糟糕的设计。但是看一下opOpAssign
的代码以及有多少代码,我的猜测是他们试图避免代码重复而忘记考虑他们正在做的事情不适用于{{1 }}。我建议你report it as a bug。