d的常与不变

,我不修改数据,不变,不能改.
要理解,常/不变/可变,可理解为不变/可变的基,而后两个(不变/可变)为子类.他们可隐式转为(基类).他们相互间不能转换.,则不变/可变都可安全传给它.
可变,则不变/常都不能传给它.
不能传递给不变.因为可能为可变数据.即使引用自身不修改,但可能外部修改引用.
一般,是不能下转的.
可变引用是唯一,且立即离开该域时,可转为不变,在从纯函数返回可变引用时,可行

MyData createData() pure {//纯,不会存储在全局
    MyData result; // N.B.: 可变
    return result;
    // 唯一可变引用,离开域.
}
	// OK: 函数为纯且数据引用唯一
	immutable MyData data = createData();

数据不包含间接,值型时.不变到可变,这是在造副本.何时用常/不变?
局部变量:常/不变都一样.
函数参数总是用,除非要存储不变数据.更通用.
有人,喜欢in,说文档更多,用-preview=in时为常域,附加额外检查参数(引用)泄露问题.

posted @ 2022-02-11 10:05  zjh6  阅读(17)  评论(0)    收藏  举报  来源