2311ddip1000不能从函数返回域引用

原文
以下程序无法用-preview=dip1000编译:

void main() @safe
{int[3] a = [1, 2, 3];int[] slice;//好slice = a[];scope ref getSlice() { return slice; }//错误:把对a局部变量的`引用`赋值给非域`getSlice()`getSlice() = a[];
}

getSlice应该可返回可安全地赋值给'a[]'的引用.

如常,去掉抽象,化简为仅指针时,更清楚:

  @safe void test(){int i;scope int* p = &i;scope ref get() { return p; }get() = &i;}

我不太清楚本地函数上的"域"是否应限定环境指针或返回值.一般,闭包环境DIP1000不健全的一大根源.
这也会影响非嵌套函数.如:

ref int* getRef(return ref scope int* p) @safe
{return p;
}
void main() @safe
{int n;scope int* p;getRef(p) = &n;
}

在没有像Rust这样成熟的生命期系统时,不确定接受此代码是否可行,但尽量,那肯定会很方便.

问题是它不认为"getRef(p)""p"变量.=的右侧使用按值或按引用转义的逻辑,而左侧使用只能返回一个变量的'表达式到变量',因此它放弃了潜在多变量式.如:

void main() @safe
{int n;scope int* p;(n ? p : p) = &n;
}

错误:把"n"局部变量的引用赋值给非域"*(n?&p:&p)"
这可通过对左边使用相同的按值转义逻辑,并对一切左边变量重复其余的checkAssignEscape逻辑来解决.
它不会有最佳时间复杂度,但复杂左边式应该不多.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/149622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QtC++与QColumnView详解

介绍 在 Qt 中,QColumnView 是用于显示多列数据的控件,它提供了一种多列列表视图的方式,类似于文件资源管理器中的详细视图。QColumnView 是基于模型/视图架构的,通常与 QFileSystemModel 或自定义模型一起使用。 以下是关于 QC…

【文末送书】计算机网络 | IO多路转接技术 | poll/epoll详解

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

前端对用户名密码加密处理,后端解密

一. 正常表单提交如图&#xff0c;可以看见输入的用户名密码等 二. 使用crypto-js.min.js进行前端加密处理 js资源地址链接&#xff1a;https://pan.baidu.com/s/1kfQZ1SzP6DUz50D–g_ziQ 提取码&#xff1a;1234 前端代码 <script type"text/javascript" src&q…

C#8.0本质论第十四章--事件

C#8.0本质论第十四章–事件 委托本身是一个更大的模式(Pattern)的基本单位&#xff0c;称为Publish-Subscribe(发布-订阅)或Observer(观察者)。 14.1使用多播委托实现Publish-Subscribe模式 14.1.1定义订阅者方法 public class Cooler {public Cooler(float temperature){T…

java命令 jmap 堆参数分析

jmap -heap pid 展示pid的整体堆信息 bash-4.4# jmap -heap 10 Attaching to process ID 10, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.172-b11using thread-local object allocation. Garbage-First (G1) GC with 8 th…

给EmEditor添加自定义外部工具DuilibPreviewer

duilib是一款xml描述UI布局的优秀的c开源界面库&#xff0c;为了方便开发布局UI&#xff0c;有网友制作了预览工具DuilibPreviewer&#xff0c;源码链接https://github.com/juhuaguai/duilib/tree/master/DuilibPreview。 为了进一步方便开发&#xff0c;便于随时预览自己用xm…

kettle创建数据库资源库kettle repository manager

数据库资源库是将作业和转换相关的信息存储在数据库中&#xff0c;执行的时候直接去数据库读取信息&#xff0c;很容易跨平台使用。 创建数据库资源库&#xff0c;如图 1.点击Connect 2.点击Repository Manager 3.点击Other Repository 4.点击Database Repository 在选择Ot…

AI监管规则:各国为科技监管开辟了不同的道路

AI监管规则&#xff1a;各国为科技监管开辟了不同的道路 一份关于中国、欧盟和美国如何控制AI的指南。 编译 李升伟 茅 矛 &#xff08;特趣生物科技有限公司&#xff0c;广东深圳&#xff09; 插图&#xff1a;《自然》尼克斯宾塞 今年5月&#xff0c;科技公司OpenAI首席…

深兰科技成功入选《2023年度国家知识产权优势企业名单》

2023年11月13日&#xff0c;国家知识产权局正式公布了《2023年度国家知识产权优势企业的名单》(以下简称“《名单》”)。深兰人工智能科技(上海)股份有限公司成功入选&#xff0c;荣获“国家知识产权优势企业”称号。 “国家知识产权优势企业”是指企业经营范围属于国家重点发展…

CUDA安装

在cmd中输入nvidia-smi。显示CUDA Version&#xff1a;12.3&#xff0c;所以只能下载小于等于12.3的版本。如下图&#xff1a; 进这个网址&#xff1a;https://developer.nvidia.com/cuda-toolkit-archive 选择一个版本下载。 选择完后之后这样选择&#xff1a; 最后点击下载即…

综述:目标检测二十年(机翻版)(未完

原文地址 20年来的目标检测&#xff1a;一项调查 摘要关键词一 介绍二 目标检测二十年A.一个目标检测的路线图1)里程碑&#xff1a;传统探测器Viola Jones探测器HOG检测器基于可变形零件的模型&#xff08;DPM&#xff09; 2)里程碑&#xff1a;基于CNN的两阶段探测器RCNNSPPN…

axios升级依赖版本后报错SyntaxError: Cannot use import statement outside a module

Axios构建为ES模块&#xff0c;而不是在Node中运行时的CommonJs。Jest的问题是它在Node中运行代码。这就是为什么告诉Jest转换Axios有效的原因。 Axios SDK附带了一个用于Node env的内置CommonJs文件。因此&#xff0c;我们可以通过将以下内容添加到您的package.json来修复它&a…

Ubuntu20.04 安装微信 【wine方式安装】推荐

安装步骤: 第一步:安装 WineHQ 安装包 先安装wine,根据官网指导安装即可。下载 - WineHQ Wikihttps://wiki.winehq.org/Download_zhcn 如果您之前安装过来自其他仓库的 Wine 安装包,请在尝试安装 WineHQ 安装包之前删除它及依赖它的所有安装包(如:wine-mono、wine-gec…

在PostGIS中进行点数据的栅格化

说明 介绍在PotGIS中将点数据转换为栅格数据。 关键字: raster、point、PostGIS 环境准备 Postgresql版本:PostgreSQL 14.0, 64-bitPostGIS版本:POSTGIS="3.3.2"QGIS版本:3.28.3-Firenze基本步骤 一、数据准备 测试数据中有一张点数据表,坐标系3857。 CRE…

.NET6使用MiniExcel根据数据源横向导出头部标题及数据

.NET6MiniExcel根据数据源横向导出头部标题 MiniExcel简单、高效避免OOM的.NET处理Excel查、写、填充数据工具。 特点: 低内存耗用&#xff0c;避免OOM、频繁 Full GC 情况 支持即时操作每行数据 兼具搭配 LINQ 延迟查询特性&#xff0c;能办到低消耗、快速分页等复杂查询 轻量…

vue.js 短连接 动态连接

有这么一种场景&#xff0c;我们实现了某个业务&#xff0c;现在需要将这个业务连接对外推广以期实现我们的运营、推广、佣金目的&#xff0c;那么我们如何实现呢&#xff1f; 比如这个页面连接为&#xff1a; https://mp.domain.com/user/creation/editor?spm1&userno12…

“一键搜索,海量商品任你选!多平台聚合,购物更便捷!“

对于多平台聚合搜索&#xff0c;根据关键词取商品列表&#xff0c;您需要使用第三方服务或软件来实现。以下是一些可能的选择&#xff1a; 使用第三方聚合搜索工具&#xff1a;有些第三方工具可以聚合多个电商平台的商品数据&#xff0c;并提供统一的搜索接口。您可以使用这些…

基于数据库(MySQL)与缓存(Redis)实现分布式锁

分布式锁 分布式锁&#xff1a;分布式锁是在分布式的情况下实现互斥类型的一种锁 实现分布式锁需要满足的五个条件 可见性&#xff1a;多个进程都能看到结果互斥性&#xff1a;只允许一个持有锁的对象的进入临界资源可用性&#xff1a;无论何时都要保证锁服务的可用性&#x…

查看,取消终端代理

查看 echo $http_proxy echo $https_proxy在 Linux 终端中&#xff0c;你可以使用以下命令取消 HTTP 和 HTTPS 的代理设置&#xff1a; export http_proxy"" export https_proxy""或者使用 unset 命令取消这两个代理设置&#xff1a; unset http_prox…

T10 数据增强

文章目录 一、准备环境和数据1.环境2. 数据 二、数据增强&#xff08;增加数据集中样本的多样性&#xff09;三、将增强后的数据添加到模型中四、开始训练五、自定义增强函数六、一些增强函数 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f…