d创建具有设定大小但未设定值的数组
原文
它必须是用户定义的.D
中的内置数组
要么是静态
的,需要在编译时知道,要么是切片
成动态数组,可以调整大小
.
内置选项:
int length = 100;
int[] int_array = new int[length];
//==
int[] int_array;
int_array.length = length;
一般是编写纯函数
,在可变
数组中创建和设置
内容,然后返回它.
pure int[] make_array(int length) {
int[] array;
array.length = length;
foreach(i, ref item; array)
item = i; // 简单初化
return array;
}
// 用法:
immutable(int)[] arr = make_array(100); // 工作
immutable(int[]) iarr = make_array(100); //工作
从纯函数
返回的可变
数据是,一般
禁止隐式转换
为不变
的例外:因为它来自纯函数
,编译器知道它是唯一
的引用,并且可安全地根据请求
将其视为不变
.
第1行和第2行用法区别在,第1行可以重新分配:
arr = something_else[]; /* cool */
而第二行
根本无法更改.
可用静态
数组,但需要在编译时
知道长度:
int[100] int_array = void;
总之,必须是用户定义
类型:
struct MyArray(T) {
@disable this(); // 禁止默认构造器
// 运行时长为参
this(size_t length) { backing = new T[length]; }
private T[] backing = void; // 保存数据
T[] opSlice() { return backing; } // 允许切片
alias opSlice this; // 隐式转换
}
用法:
void main() {
int length = 100; // runtime
// MyArray!int uninitialized;
// 由于@disable this:编译错误
MyArray!int uninitialized = void;
// 好,显式未初化
uninitialized = MyArray!int(length);
// 创建
auto my_array = MyArray!int(length);
// 创建
// my_array.length = 20; // 不能调整
// my_array ~= 1; //
int[] slice = my_array; // 可切片.
}
使用D中的包装器
结构,可有选择
地启用和禁用
底层类型功能
,而不会降低效率
.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现