fre*_*low 3 constructor d initialization immutability pass-by-reference
void increment(ref int i)
{
++i;
}
class Class
{
immutable int member;
this(int parameter)
{
member = parameter;
++member; // okay
increment(member); // compile-time error
}
}
Run Code Online (Sandbox Code Playgroud)
为什么++member
好,但increment(member)
不是吗?这两种行为不应该相同吗?
可能是因为引用increment
不是scope
,所以它有可能被转义超出构造函数的范围,这会破坏其不变性member
,并且编译器无法验证它是否正常.
(可能这scope
也不会起作用,但它应该是.如果实施得当,我认为scope
会解决很多这样的错误,并提供有趣的优化.如果没有,我会说它是一个错误.)
我之前已经指出了半类似的错误,但是与代表们一起.
Const/immutable在D中确实存在这样的问题.