d使用in
位置在此
d
成立已来,就支持参数上的存储类
(in,ref,和out
),out和ref
是经常用到,而in
则落后了.
in
最初为常 域
的别名,为了支持DIP1000
引入的域
,把它当作常
的别名.
DMD v2.092.0
加上-preview=in
来表示最初的常 域
而不是不带开关
时的常
.
然而这并不是in
应用于输入参数
的本义.输入参数:是仅检查而不修改,也不保留对它的引用
的参数
,这是常域
所管,但一些输入参数可能很大
,或复制它们有(postblit,复制构造
等)副作用,此时应提供引用
来避免运行时开销
.
但D
不支持用引用传递右值
,一般是用in
一个,再用in ref
一个,这对单参
有效,但对组合
参数没用.
因而,重新定义in
来正确支持所有这些用例
.现在,可优化时用引用
传递,也可接受右值
.用开关
时,in ref
则会报错.
按引用传递
的规则如下:
有复杂复制/析构
(postblit/复制构造/析构器
)时,始终按引用传递.
不可复制
,则始终按引用传递.
(动态数组,函数指针,委托,关联数组,类)
等引用类型,则不按ref
传递,来允许闭包中的协变
.
否则,如果类型大小需要按引用
,它将按引用
传递.目前,>机器字大小两倍
类型按引用
传递,这由后端控制
,可根据平台ABI
来改.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现