0
点赞
收藏
分享

微信扫一扫

d错误传播数组域


​​原文​​​ 用​​-preview=dip1000​​标志,应可​​编译​​,但未编译.

@safe int[] fun()
{ import std : 数组, map;
r = [1,2,3].map!"a+3";
return r.数组;
}

如果直接返回​​r​​​,数据引用会​​逃逸​​​,但​​数组​​​会复制数据.无论有​​域​​​与否,应允许返回​​数组区间​​​.
这里问题是为了能够​​​传递​​​给​​数组​​​,​​r​​​是​​域​​​,​​数组​​​还需要接收​​域参数​​​.但是,因为是​​复制​​​到分配​​内存​​​中,​​数组​​​的参数不能是​​域​​.

除非区间有​​非域​​​区间原语,​​数组​​​参数应该推导​​域​​​.它不是​​逃逸​​​输入数组,而是​​解引用​​​,并复制元素到新的非域​​GC​​​数组中.
推导​​​域​​​失败,会退回到从​​纯​​​推导中的​​中域​​.


举报

相关推荐

0 条评论