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",
],
posted @   zjh6  阅读(13)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示