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/等.
浙公网安备 33010602011771号