d的常与不变
常
,我不修改数据,不变
,不能改.
要理解,常/不变/可变
,可理解为常
为不变/可变
的基,而后两个(不变/可变
)为常
的子类
.他们可隐式转为常
(基类).他们相互间不能转换.常
,则不变/可变
都可安全传给它.
可变
,则不变/常
都不能传给它.
常
不能传递给不变
.因为常
可能为可变
数据.即使引用自身不修改,但可能外部修改
该引用
.
一般,是不能下转
的.
可变
引用是唯一,且立即离开该域时,可转为不变
,在从纯函数返回可变引用时,可行
MyData createData() pure {//纯,不会存储在全局
MyData result; // N.B.: 可变
return result;
// 唯一可变引用,离开域.
}
// OK: 函数为纯且数据引用唯一
immutable MyData data = createData();
数据不包含间接
,值型时.不变到可变,这是在造副本
.何时用常/不变
?
局部变量
:常/不变
都一样.
函数参数
总是用常
,除非要存储不变
数据.常
更通用.
有人,喜欢in
,说文档更多,用-preview=in
时为常域
,附加额外检查参数(引用)
泄露问题.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现