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来改.

posted @   zjh6  阅读(12)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示