d的in是理想的
但,低估"in
"了.很难
决定参数类型:
// 愚蠢的常:
void foo(const(int));
//给用户信息太多
//用户不必知道我将改变参数:
void foo(int);
//复制很昂贵时,要`记得`排除右值:
void foo(ref const(ExpensiveToCopy));
//不可复制类型时,必须用'引用':
void foo(ref const(NonCopyable));
如果foo
是模板呢?ref const
或按值
?还是进出
?总是还是有时
?
太多了!😃
我只想说"我想按输入
用这个参数
".我不在乎它是右值还是复制成本高或不可复制
.如果可能,加上引用
.
in文档
'in'
允许按ref
传右值!'in'
消除了函数想用对象的副作用.'in'
按引用传递不可复制
类型.很不错.
话虽如此,'in'
或'const'
也有注意.如果我想修改参数副本:
void foo(in int i) {
++i; // 错误
}
所以必须复制
:
auto j = i;
++j; // 错误
因为"auto"
太安全了,需要"const"
,用:
int j = i;
++j;
或许在模板代码中:
import std.traits : Unqual;
Unqual!(typeof(i)) j = i;
++j;
不错.
const int* ptr;
auto p2 = ptr;
static assert(is(typeof(p2) == const(int)*));
使auto
在函数
内去掉最外层
限定.
或const* p2 = ptr
,允许修改p2
.
cast()ptr
可从类型中去除
最外层的const/immutable/等
.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现