d的引用与右值
原文
可用临时值,但不应为了以后使用而存储它们.此时,如果ref参数也是"域",应该可传递右值.见下文.
是的,虽然仍是幕后指针,但"ref"避免了指针语法.
然而,在D中有了变化:也可通过"in"参数神奇的按引用传递右值.目前需要-preview=in编译器开关,使"in"参数表示"const scope":
参考
import std.stdio;
struct S {
string id;
}
void foo(in S s) {
writeln("foo received ", s.id);
}
void main() {
auto s = S("lvalue");
foo(s);
foo(S("rvalue"));
}
//打印
foo received lvalue
foo received rvalue
可添加复制构造器到S,来查看"in"是按副本还是按值.
可用-preview=rvaluerefparam编译.它应该是默认的.我一直在用它.
struct vec2{ float x; float y;}
void pass(const ref vec2 pos)
{}
void main()
{
pass( vec2(1,1) );
}
//用dub:
"dflags": [
"-preview=rvaluerefparam",
],
浙公网安备 33010602011771号