d的常与不变
常,我不修改数据,不变,不能改.
要理解,常/不变/可变,可理解为常为不变/可变的基,而后两个(不变/可变)为常的子类.他们可隐式转为常(基类).他们相互间不能转换.常,则不变/可变都可安全传给它.
可变,则不变/常都不能传给它.
常不能传递给不变.因为常可能为可变数据.即使引用自身不修改,但可能外部修改该引用.
一般,是不能下转的.
可变引用是唯一,且立即离开该域时,可转为不变,在从纯函数返回可变引用时,可行
MyData createData() pure {//纯,不会存储在全局
MyData result; // N.B.: 可变
return result;
// 唯一可变引用,离开域.
}
// OK: 函数为纯且数据引用唯一
immutable MyData data = createData();
数据不包含间接,值型时.不变到可变,这是在造副本.何时用常/不变?
局部变量:常/不变都一样.
函数参数总是用常,除非要存储不变数据.常更通用.
有人,喜欢in,说文档更多,用-preview=in时为常域,附加额外检查参数(引用)泄露问题.
浙公网安备 33010602011771号