d允许隐式切片静态数组
struct S {
int[] data;
this(int[] _data) { data = _data; }
}
S makeS() {
int[5] data = [ 1, 2, 3, 4, 5 ];
return S(data);
}
void func(S s) {
import std.stdio;
writeln("s.data = ", s.data);
}
void main() {
S s = makeS();
func(s);
}
期望输出:
s.data = [1, 2, 3, 4, 5]
实际输出:
s.data = [-580467872, 32764, 1617267003, 21973, 5]
如果使用@safe
注解函数,会得到:
test.d(9)
:弃用:引用赋值
给调用this
的非域参数的数据
局部变量
编译器
自动切片
静态数组,是非常好的,因为键入更少.应由@safe
和scope
来检测逃逸过期栈帧
指针.不过,在系统
代码中,没问题.
我不同意,编译器隐式
切片静态数组
,和C++
中的隐式构造
有同样的问题:引起意外
.
不应逃逸过期栈帧
指针,至少,不应
是隐式
的.如果想显式
地逃逸引用
局部静态数组
,应强制
显式切片,而不是让编译器
悄悄插入
它.
意思是,有时,确实值得隐式切片
静态数组.如,标准库
可实现带动态数组
函数,用户可方便
地使用静态数组
来调用它们.这一般不会使内存
崩溃,对无经验用户
可有更流畅
的体验.
此外,计划默认设置DIP1000
和@safe
,因此,默认
自动发现
自动切片
可能逃逸到过期栈帧
指针的动态数组
.
反对该行为
,只会给经验不足
用户带来烦恼
,而没有明显
好处.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现